气泡排序变化中的C seg故障

时间:2015-03-13 04:31:25

标签: c segmentation-fault bubble-sort

我的代码如下:

  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的变体,因为每次都会处理完整列表,并且会在两个方向上执行排序。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

使用sizeof来获取数组的大小在C中很棘手,只有在应用于原始数组时才能给出正确的答案。例如,

int array[10];
int len = sizeof(array); // => 10 * sizeof(int)

然而,当应用于指针时,就像在bubbleSort函数中所做的那样,它只给出int指针的大小。你必须将数组的大小和指向函数的指针一起传递。