0

那是我的功能:

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?

4

3 回答 3

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

我想你的意思是:

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

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

于 2012-09-27T01:43:39.867 回答
1

你的排序功能很好。唯一的问题是您在1through n(含)位置输入元素,而您应该在函数的两个循环中使用0through (含)。n-1main()

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

cout<<(i+1)<<" element = ";
于 2012-09-27T01:47:45.407 回答
1

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

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

原因是:

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

如果插入 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 已排序

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

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

很不错的算法网书:http ://algs4.cs.princeton.edu/home/

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

于 2012-09-27T02:04:13.877 回答