写一函数用起泡法对输入的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个字符。如果您的字符串长度可能超过这个限制,请相应地调整数组的大小。
不知道你这个问题是否已经解决, 如果还没有解决的话:选择法排序:指每次选择所要排序的数组中的最大值(由小到大排序则选择最小值)的数组元素,将这个数组元素的值与最前面没有进行排序的数组元素的值互换。
程序设计:在改例中变量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;
}
调试结果如下:
我可以为您提供一个用起泡法对输入字符串进行排序的函数,并将排序结果存储到一个二维数组中的解决方案。
首先,我们可以定义一个函数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函数输出每个字符串,以便用户查看排序结果。