繁体   English   中英

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]
这些元素之一不在您的数组中
您刚刚进行了越界访问。

我建议您考虑使用内置函数。 qsort 可能会简化事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM