我的代码如下:
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;
}
}
}
这是经典bubblesort的变体,因为每次都会处理完整列表,并且会在两个方向上执行排序。 任何帮助将不胜感激。
答案 0 :(得分:2)
使用sizeof
来获取数组的大小在C中很棘手,只有在应用于原始数组时才能给出正确的答案。例如,
int array[10];
int len = sizeof(array); // => 10 * sizeof(int)
然而,当应用于指针时,就像在bubbleSort
函数中所做的那样,它只给出int
指针的大小。你必须将数组的大小和指向函数的指针一起传递。