[英]cs50 pset3 - Sorting
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
看看这两行。
values[i+1] = values[i];
values[i+1]=temp;
看起来您是否将同一个元素设置了两次,设置为两个不同的值,但没有任何效果?
第一个陈述的目的是什么? 这就是你的答案。
当i
是它的最后一个值 ( n-1
) 时,您将比较values[n-1]
与values[n]
。
这些元素之一不在您的数组中。
您刚刚进行了越界访问。
我建议您考虑使用内置函数。 qsort 可能会简化事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.