cs50 pset3 - 排序
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]
。
其中一个元素是 不在你的数组中。
您刚刚进行了 out-of-bounds 访问。
我建议您考虑使用内置函数。 qsort 可以简化事情。
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]
。
其中一个元素是 不在你的数组中。
您刚刚进行了 out-of-bounds 访问。
我建议您考虑使用内置函数。 qsort 可以简化事情。