gpt4 book ai didi

c - 在c中按字母顺序对字符数组进行冒泡排序

转载 作者:太空宇宙 更新时间:2023-11-04 06:40:06 25 4
gpt4 key购买 nike

我正在尝试按字母顺序对字符数组进行冒泡排序。我的代码如下:

#define CLASS_SIZE 10
#include <stdio.h>

void bubbleSortAWriteToB(const char a[], char *b[]);

int main(void){
char *s_letters[CLASS_SIZE];
char letters[CLASS_SIZE] = {'a','r','p','b','r','c','x','e','w','j'};
bubbleSortAWriteToB(letters,s_letters);
return 0;
}

void bubbleSortAWriteToB(const char a[], char *b[]){
char temp;
int i,j;
for(i=0;i<CLASS_SIZE-1;i++){
for(j=1;j<CLASS_SIZE;j++){
if((int)a[j-1]>(int)a[j]){
temp = a[j];
*b[j] = a[j-1];
*b[j-1] = temp;

}

}

}
}

它不会给出任何类型的错误,但是当我运行它时它会卡住,就像它有点陷入无限循环。但据我所知,它也不是。你能帮帮我吗?

最佳答案

修复您的代码

首先,您的代码存在一些非常严重的基本问题。不过,在我们解决这些问题之前,让我们先解决目前为止的问题。您的排序循环似乎对 a 数组进行了一半排序,对 b 数组进行了一半排序。您也从未将 b 数组初始化为包含任何值。这是您的代码的更正版本:

#define CLASS_SIZE 10
#include <stdio.h>

void bubbleSortAWriteToB(const char a[], char * b[]);

int main(void){
int i;

// initialize array
char * s_letters[CLASS_SIZE];
char letters[CLASS_SIZE] = {'a','r','p','b','r','c','x','e','w','j'};
// sort array
bubbleSortAWriteToB(letters,s_letters);

// print sorted array
for (i=0;i<CLASS_SIZE;i++){
printf("%c\n", *s_letters[i]);
}

return 0;
}

void bubbleSortAWriteToB(const char a[], char * b[]){
char * temp;
int i,j;

// initialize b array to hold pointers to each element in a
for (i=0;i<CLASS_SIZE;i++){
b[i] = (char *)(a) + i;
}

// in-place sort the b array
for(i=0;i<CLASS_SIZE;i++){
for(j=i+1;j<CLASS_SIZE-1;j++){
if(*b[j-1]>*b[j]){
temp = b[j];
b[j] = b[j-1];
b[j-1] = temp;
}
}
}
}

修复方法是用指向 a 的点初始化 b 数组,然后通过比较 a 数组中的相应值对 b 数组就地排序。


简化代码

在您的原始代码中,策略是有一个指针数组 (b) 指向 a 中的元素,然后进行排序。但这在这里是不必要的,因为字符比指针小,所以让 b 成为一个字符数组更节省空间,也更简单。

此外,您的间距非常紧凑,难以阅读。这是一个使用 b 作为字符数组而不是指针的解决方案,并提供改进的间距。另外,没有必要声明上面的功能。定义函数并声明一次就足够了。

#define CLASS_SIZE 10
#include <stdio.h>

void bubbleSortAWriteToB(const char a[], char b[]){
char temp;
int i,j;

// initialize b array to hold pointers to each element in a
for (i = 0; i < CLASS_SIZE; i++){
b[i] = a[i];
}

// in-place sort the b array
for(i = 0; i < CLASS_SIZE; i++){
for(j = i + 1; j < CLASS_SIZE - 1; j++){
if(b[j-1] > b[j]){
temp = b[j];
b[j] = b[j-1];
b[j-1] = temp;
}
}
}
}

int main(void){
int i;

// initialize array
char s_letters[CLASS_SIZE];
char letters[CLASS_SIZE] = {'a','r','p','b','r','c','x','e','w','j'};

// sort array
bubbleSortAWriteToB(letters, s_letters);

// print sorted array
int i;
for (i = 0; i < CLASS_SIZE; i++){
printf("%c\n", s_letters[i]);
}

return 0;
}

关于c - 在c中按字母顺序对字符数组进行冒泡排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9809839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com