冒泡排序变体中的 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 指针的大小。您必须将数组的大小与指向函数的指针一起传递。