奇怪的冒泡排序行为

时间:2010-05-09 22:06:21

标签: c bubble-sort

任何人都可以解释为什么这个冒泡排序功能不起作用以及为什么我的输出会丢失数字?我对C很新,所以请原谅我,如果这是我错过的非常明显的事情。

#include <stdio.h>
#include <stdlib.h>

int bubble(int array[],int length) {
  int i, j;
  int temp;

  for(i = 0; i < (length); ++i) {
    for(j = 0; j < (length - 1); ++j) {
      if(array[i] > array[i+1]) {
        temp = array[i+1];
        array[i+1] = array[i];
        array[i] = temp;
      }
    }
  }
  return 0;
}

int main() {
  int array[] = {12,234,3452,5643,0};
  int i;
  int length;

  length = (sizeof(array)/sizeof(int));
  printf("Size of array = %d\n", length);
  bubble(array, length);
  for (i = 0; i < (length); ++i) {
    printf("%d\n", array[i]);
  }
  return 0;
}

输出

Size of array = 5
12
234
3452
0
0

4 个答案:

答案 0 :(得分:4)

在你的内循环中,根本不使用j。仔细检查你的逻辑。 另请注意,array [i + 1]超出了数组边界。

答案 1 :(得分:3)

for (i = 0; i < (length-1); ++i) {
  for (j = 0; j < (length-i-1); ++j) {
    if(array[j] > array[j+1]) {
      temp = array[j+1];
      array[j+1] = array[j];
      array[j] = temp;
    }
  }
}

在冒泡排序中,您只使用内循环变量。

答案 2 :(得分:0)

另一件事,如果我记得很清楚,内循环从0变为i;但我认为这只是一种优化(因为尾部在每一步都保持分类)。

尝试用纸和笔一步一步地运行代码。这总是有效的。

答案 3 :(得分:0)

for (i = 0; i < (length); i++) {
  for (j = 1; j < (length-i); j++) {
    if(array[j-1] > array[j]) {
      temp = array[j-1];
      array[j-1] = array[j];
      array[j] = temp;
    }
  }
}