选择排序升序

时间:2012-09-27 01:36:38

标签: c++

这是我的功能:

int main() {
    double data[100];

    int num;

    cout<<"num= ";
    cin>>num;

    for(int i = 1; i <= num; i++) {
        cout<<i<<" element = ";
        cin>>data[i];
    }

    Sort(data, num);

    for (int i = 1; i <= num; i++) {
        cout<<data[i]<<endl;
    }

    return 0;
}

void Sort(double data[], int n) {
    int i,j,k;
    double min;

    for(i = 0; i < n-1; i++) {
        k = i;
        min = data[k];

        for(j = i+1; j < n; j++)
            if(data[j] < min) {
                k = j;
                min = data[k];
            }
        data[k] = data[i];
        data[i] = min;
    }
}

如果我为exp写的话。三个元素:8,9,1再次cout 8,9,1?

3 个答案:

答案 0 :(得分:1)

for(int i = 1; i <= num; i++) { // WRONG

我认为你的意思是:

for(int i = 0; i < num; i++) { // RIGHT

C中的数组是0索引记住。

答案 1 :(得分:1)

你的排序功能很好。唯一的问题是您在1n的位置输入了元素,包括0n-1的{​​{1}},{{1}功能。

如果您需要通过main()打印数字1,请使用

n

答案 2 :(得分:1)

你应该在for循环中使用0索引begin for(int i = 0; i < N; ++i)

因此修复这两个索引错误将使您的代码正常运行。

原因是:

如果使用data[]作为开头将数据写入1,则数据数组的第一项将是一个随机数:

如果插入3个元素,则数组将如下所示:

data[0] = ??? // maybe a very very big number
data[1] = 8
data[2] = 9
data[3] = 1

在您的Sort函数中,索引从0开始,在num之前结束,这意味着您的代码只会对data[0], data[1], data[2]进行排序。

如果您使用:num = 3,3 2 1作为原始代码的输入数据,您可以看到3和2已排序

我猜你的排序代码是从某个地方用Google搜索的,请尝试理解它。

良好的在线算法课程:https://www.coursera.org/course/algs4partI

一个非常好的算法在线书籍:http://algs4.cs.princeton.edu/home/

顺便说一下,for(j = i+1; j < n; j++)函数中的Sort如果有{ }个大括号会更好。