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 可以简化事情。