写一函数用起泡法对输入的10个字符串按由小到大的顺序排列。(起泡法用函数表示,二维数组)

写一函数用起泡法对输入的10个字符串按由小到大的顺序排列。
用函数表示起泡法内容
字符串放入二维数组里面(谢谢)


#include <stdio.h>
#include <string.h>

#define STR_LEN 20
#define ARRAY_SIZE 10

void bubble_sort(char arr[][STR_LEN], int size){
    int i, j;
    for(i = 0; i < size-1; i++){
        for(j = 0; j < size-i-1; j++){
            if(strcmp(arr[j], arr[j+1]) > 0){
                char temp[STR_LEN];
                strcpy(temp, arr[j]);
                strcpy(arr[j], arr[j+1]);
                strcpy(arr[j+1], temp);
            }
        }
    }
}

int main(){
    char input[ARRAY_SIZE][STR_LEN];
    char result[ARRAY_SIZE][STR_LEN];

    int i;
    for(i = 0; i < ARRAY_SIZE; i++){
        printf("Enter string %d: ", i+1);
        scanf("%s", input[i]);
    }

    bubble_sort(input, ARRAY_SIZE);

    printf("Sorted strings:\n");
    for(i = 0; i < ARRAY_SIZE; i++){
        printf("%s\n", input[i]);
        // 将排序后的结果复制到二维数组中
        strcpy(result[i], input[i]);
    }

    return 0;
}

该回答引用ChatGPT-3.5,仅供参考,不保证完全正确

以下是用C语言编写的函数,使用冒泡排序算法对输入的10个字符串按照由小到大的顺序进行排序:

#include <stdio.h>
#include <string.h>

void bubbleSortStrings(char strings[][100], int size) {
    int i, j;
    char temp[100];
    
    for (i = 0; i < size - 1; i++) {
        for (j = 0; j < size - i - 1; j++) {
            if (strcmp(strings[j], strings[j + 1]) > 0) {
                strcpy(temp, strings[j]);
                strcpy(strings[j], strings[j + 1]);
                strcpy(strings[j + 1], temp);
            }
        }
    }
}

int main() {
    char strings[10][100];
    int i;
    
    printf("Enter 10 strings:\n");
    for (i = 0; i < 10; i++) {
        fgets(strings[i], sizeof(strings[i]), stdin);
        // Removing the newline character
        strings[i][strlen(strings[i]) - 1] = '\0';
    }
    
    bubbleSortStrings(strings, 10);
    
    printf("\nSorted strings:\n");
    for (i = 0; i < 10; i++) {
        printf("%s\n", strings[i]);
    }
    
    return 0;
}

在主函数中,我们首先声明了一个二维字符数组strings,用于存储输入的字符串。然后通过循环,要求用户输入10个字符串,并使用fgets函数进行输入。接下来,我们调用bubbleSortStrings函数,将字符串数组作为参数传递给它进行排序。最后,我们在屏幕上打印出排序后的字符串数组。


请注意,这里假设输入的每个字符串的最大长度不超过99个字符。如果您的字符串长度可能超过这个限制,请相应地调整数组的大小。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7690892
  • 你也可以参考下这篇文章:写一个函数,用选择法对输入的10个字符串按由小到大顺序排列。
  • 除此之外, 这篇博客: (2)用选择法对10个整数排序中的 用选择法对10个整数排序 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    选择法排序:指每次选择所要排序的数组中的最大值(由小到大排序则选择最小值)的数组元素,将这个数组元素的值与最前面没有进行排序的数组元素的值互换。
    程序设计:在改例中变量i代表每次排序所选择的数组元素的值,用变量j遍历未排序的数组中的元素。若符合条件,则交换两者的值。

    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
    int main()
    {
    	int i,j;
    	int t;
    	int a[10];
    	printf("Please Enter ten number:");
    	for (i = 0; i < 10; i++)
    	{
    		scanf_s("%d", &a[i]);
    	}
    	for (i = 0; i < 10; i++)
    	{
    		for (j = i+1; j < 10; j++)
    		{
    			if (a[j] < a[i])
    			{
    				t = a[j]; a[j] = a[i]; a[i] = t;
    			}
    		}
    	}
    	for (i = 0; i < 10; i++)
    	{
    		printf("%d ", a[i]);
    	}
    	system("pause");
    	return 0;
    }
    

    调试结果如下:
    在这里插入图片描述

  • 您还可以看一下 刘磊老师的计算机进制转换课程中的 十进制整数转为二进整数小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    我可以为您提供一个用起泡法对输入字符串进行排序的函数,并将排序结果存储到一个二维数组中的解决方案。

    首先,我们可以定义一个函数bubbleSort来实现用起泡法排序。该函数需要两个参数:一个存储字符串的数组和该数组长度。函数内容如下:

    void bubbleSort(char arr[][100], int n) {
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                if (strcmp(arr[j], arr[j+1]) > 0) {
                    char temp[100];
                    strcpy(temp, arr[j]);
                    strcpy(arr[j], arr[j+1]);
                    strcpy(arr[j+1], temp);
                }
            }
        }
    }
    

    该函数内部使用双重循环进行排序,每一次外层循环会排序一个元素,内层循环则是进行具体的比较和交换操作。在对字符串进行比较时,我们可以使用strcmp函数。该函数会将两个字符串按字典序进行比较,并返回一个整数值。如果第一个字符串小于第二个字符串,返回负数;如果两个字符串相等,返回零;如果第二个字符串小于第一个字符串,返回正数。在本函数内部我们使用该函数进行了字符串的比较,如果需要交换顺序则使用strcpy实现交换。

    接下来,我们需要读取10个字符串并进行排序。这里我们可以定义一个二维数组来存储字符串,并使用标准输入函数fgets来读取每个字符串。我们在读取完10个字符串后,调用bubbleSort函数进行排序,排序完成后将结果存储在另一个二维数组中。完整代码如下:

    #include <stdio.h>
    #include <string.h>
    
    void bubbleSort(char arr[][100], int n) {
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                if (strcmp(arr[j], arr[j+1]) > 0) {
                    char temp[100];
                    strcpy(temp, arr[j]);
                    strcpy(arr[j], arr[j+1]);
                    strcpy(arr[j+1], temp);
                }
            }
        }
    }
    
    int main() {
        int n = 10;
        char arr[n][100]; // 存储字符串的数组
        char sortedArr[n][100]; // 排序后的数组
    
        // 读入字符串
        for (int i = 0; i < n; i++) {
            fgets(arr[i], 100, stdin); // 使用fgets读入字符串
            // 去掉字符串末尾的换行符
            arr[i][strcspn(arr[i], "\n")] = '\0';
        }
    
        // 对字符串进行排序
        bubbleSort(arr, n);
    
        // 将排序后的字符串存储到sortedArr中
        for (int i = 0; i < n; i++) {
            strcpy(sortedArr[i], arr[i]);
        }
    
        // 输出排序后的字符串
        for (int i = 0; i < n; i++) {
            printf("%s\n", sortedArr[i]);
        }
    
        return 0;
    }
    

    在读入每个字符串后,我们还使用了一个小技巧来去掉fgets读入的字符串末尾的换行符。具体来说,我们使用了strcspn函数来查找字符串中第一个换行符的位置,并将其替换成'\0',从而去掉换行符。

    最后,我们遍历排序后的数组并使用printf函数输出每个字符串,以便用户查看排序结果。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^