数组排序为降序而不是升序

时间:2017-08-06 13:35:38

标签: c++ arrays sorting

我编写的这个程序将数组按升序排序,将其排序为降序,我不明白为什么。任何帮助表示赞赏。

#include<iostream>
using namespace std;
int main() {
    int a[20] = { 21, 31, 1, 5, 3, 7, 87, 324, 21, 990, 34, 33, 21, 123, 54, 45,
            66, 76, 23, 44 }, t;
    for (int i = 0; i < 20; i++) {
        for (int j = 0; j < 20; j++) {
            if (a[i] < a[j]) {
                t = a[i];
                a[i] = a[j];
                a[j] = t;
                }

        }
    }
    cout << endl;
    for (int i = 0; i < 20; i++) {
        cout << a[i] << "\t";
    }
}

4 个答案:

答案 0 :(得分:1)

由于你写的条件

if (a[i] < a[j])

所以如果前一个元素小于更远的元素,那么它就会被交换

答案 1 :(得分:0)

更改if (a[i] < a[j]) to if (a[i] > a[j])
对于按升序排序,您希望在前一个元素大于下一个元素时交换元素 此动画将帮助您了解冒泡排序http://cathyatseneca.github.io/DSAnim/web/bubble.html

的工作原理

答案 2 :(得分:0)

如果从第(i + 1)个位置开始内循环,则不必进行任何更改。
将以下代码替换为第二个代码:

for (int j = i+1; j < 20; j++)

答案 3 :(得分:0)

更改内部循环j = i + 1;

中的代码
 int a[20] = { 21, 31, 1, 5, 3, 7, 87, 324, 21, 990, 34, 33, 21, 123, 54, 45,
                        66, 76, 23, 44 }, t;
                for (int i = 0; i < 20; i++) {
                    for (int j = i+1; j < 20; j++) { // not j=0, please use use **j=i+1;**
                        if (a[i] < a[j]) {
                            t = a[i];
                            a[i] = a[j];
                            a[j] = t;
                            }

                    }
                }
相关问题