cs50 pset3 - 排序

时间:2017-01-26 17:59:30

标签: c cs50

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

2 个答案:

答案 0 :(得分:0)

看看这两行。

 values[i+1] = values[i];
 values[i+1]=temp;

看起来你是不是将两个相同的元素设置为两个不同的值而没有效果?

第一个陈述的目的是什么?有你的答案。

i是其最后一个值(n-1)时,您会将values[n-1]values[n]进行比较。其中一个元素是 < em>不在您的阵列中 。你刚刚进行了越界访问。

答案 1 :(得分:0)

我建议你考虑使用内置功能。 qsort可以简化事情。