冒泡排序出错了
#include <stdio.h>
void Better_Bubble_sort(int *array, int n);
int main(void)
{
int i, array[6] = {3,1,6,2,9,7};
printf("The array before being sorted is: \n");
for(i = 0; i < 6; i++){
printf("%d ",*(array + i));
}
Better_Bubble_sort(array,6);
printf("\nThe array after being sorted is: \n");
for(i = 0; i < 6; i++){
printf("%d ",*(array + i));
}
printf("\n");
return 0;
}
void Better_Bubble_sort(int *array, int n)
{
int bound = n;
int i,m;
int a;
while(bound != 0){
m = 0;
for(i = 0; i < bound; i++){
if(*(array + i) > *(array + i + 1)){
a = *(array + i);
*(array + i) = *(array + i + 1);
*(array + i + 1) = a;
m = i;
}
}
bound = m;
}
}
问题:排序结果出错了,还有,m = 0 那句如果不放在while循环里面数组元素在排序前都无法打印出来
[解决办法]
没调试,看了一下,应该int bound = n -1;
你试试。。。
[解决办法]
void Better_Bubble_sort(int *array, int n)
{
int bound = n - 1;//这里是n-1。。。否则你后边array+i+1那里会越界。。
int i,m;
int a;
while(bound != 0){
//m = 0如果不放在while里边,如果上一次循环是还没排好序,则m会大于0
//如果经过上次循环后已经排好序。。那么m将不会再次被赋值。。然后m就永远不等于0。。
//然后。。就死循环了。。
m = 0;
for(i = 0; i < bound; i++){
if(*(array + i) > *(array + i + 1)){
a = *(array + i);
*(array + i) = *(array + i + 1);
*(array + i + 1) = a;
m = i;
}
}
bound = m;
}
}
[解决办法]
为什么一定要写那么晦涩难懂呢?
for(i = 0; i < bound; i++){
if(array[i] > array[i+1]){
a = array[i];
array[i] = array[i+1];
array[i+1] = a;
m = i;
}
}