冒泡排序变体中的 C 段错误
C seg fault in bubble sort variation
我的代码如下:
void bubbleSort(char *array, int size){
int sorted = 0;
int x;
while(!sorted){
int start = 0;
int stop = size;
sorted = 1;
for(x = start; x < stop; x++){
if(array[x] > array[x+1]){
swap(array[x], array[x+1]);
sorted = 0;
}
}
if(sorted){
break;
}
sorted = 1;
for(x = stop; x > start; x--){
if(array[x-1] > array[x]){
swap(array[x], array[x-1]);
sorted = 0;
}
}
}
}
并基于算法:
sorted = false
while (!sorted){
start = start element of sublist.
stop = stop element of sublist.
sorted = true
for (x = start; x < stop ; x++){
if Numbers[x] > Numbers[x+1]{
swap(Numbers[x], Numbers[x+1]);
sorted = false;
}
}
if (sorted) break;
sorted = true
for (x = stop; x > start ; x--){
if Numbers[x-1] > Numbers[x]{
swap(Numbers[x], Numbers[x-1]);
sorted = false;
}
}
}
这是经典冒泡排序的变体,因为每次都处理完整列表,并且排序是双向进行的。
任何帮助将不胜感激。
使用 sizeof
获取数组的大小在 C 语言中很棘手,它仅在应用于原始数组时才会给出正确的答案。例如,
int array[10];
int len = sizeof(array); // => 10 * sizeof(int)
然而,当应用于指针时,就像您在 bubbleSort
函数中所做的那样,它仅给出 int
指针的大小。您必须将数组的大小与指向函数的指针一起传递。
我的代码如下:
void bubbleSort(char *array, int size){
int sorted = 0;
int x;
while(!sorted){
int start = 0;
int stop = size;
sorted = 1;
for(x = start; x < stop; x++){
if(array[x] > array[x+1]){
swap(array[x], array[x+1]);
sorted = 0;
}
}
if(sorted){
break;
}
sorted = 1;
for(x = stop; x > start; x--){
if(array[x-1] > array[x]){
swap(array[x], array[x-1]);
sorted = 0;
}
}
}
}
并基于算法:
sorted = false
while (!sorted){
start = start element of sublist.
stop = stop element of sublist.
sorted = true
for (x = start; x < stop ; x++){
if Numbers[x] > Numbers[x+1]{
swap(Numbers[x], Numbers[x+1]);
sorted = false;
}
}
if (sorted) break;
sorted = true
for (x = stop; x > start ; x--){
if Numbers[x-1] > Numbers[x]{
swap(Numbers[x], Numbers[x-1]);
sorted = false;
}
}
}
这是经典冒泡排序的变体,因为每次都处理完整列表,并且排序是双向进行的。 任何帮助将不胜感激。
使用 sizeof
获取数组的大小在 C 语言中很棘手,它仅在应用于原始数组时才会给出正确的答案。例如,
int array[10];
int len = sizeof(array); // => 10 * sizeof(int)
然而,当应用于指针时,就像您在 bubbleSort
函数中所做的那样,它仅给出 int
指针的大小。您必须将数组的大小与指向函数的指针一起传递。