我编写的这个程序将数组按升序排序,将其排序为降序,我不明白为什么。任何帮助表示赞赏。
#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";
}
}
答案 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;
}
}
}