void sort(int values[], int n)
{
int swap, i;
do{
swap = 0;
for(i=0; i<n; i++){
if(values[i]>values[i+1]){
int temp = values[i+1];
values[i+1] = values[i];
values[i+1]=temp;
swap = 1;
}printf("%d\n", values[i]);
}
}while(swap == 1);
}
它似乎没有起作用。什么可能是错的?
值:59797 10425 37569 52527 36285
排序:10425 37569 52527 36285 59797
改变了它
void sort(int values[], int n)
{
int swap, i, temp;
// TODO: implement an O(n^2) sorting algorithm
do{
swap = 0;
for(i=0; i<n; i++){
if(values[i]>values[i+1]){
temp = values[i+1];
values[i+1] = values[i];
values[i]=temp;
swap = 1;
}
printf("%d\n", values[i]);
}
}while(swap == 1);
}
值:59797 10425 37569 52527 36285
排序:0 10425 36285 37569 52527
答案 0 :(得分:0)
看看这两行。
values[i+1] = values[i];
values[i+1]=temp;
看起来你是不是将两个相同的元素设置为两个不同的值而没有效果?
第一个陈述的目的是什么?有你的答案。
当i
是其最后一个值(n-1
)时,您会将values[n-1]
与values[n]
进行比较。其中一个元素是 < em>不在您的阵列中 。你刚刚进行了越界访问。
答案 1 :(得分:0)
我建议你考虑使用内置功能。 qsort可以简化事情。