基本上这是我的任务我不是要你完成这个任务,只是帮助我。
对结构数组进行排序
在此作业中,您将创建一个结构数组并排序 数组。
- 创建一个包含(至少)3 个字段的结构
- 创建一个结构数组
- 将数据读入结构数组(10 到 15 条记录)
- 打印数组
- 根据结构的 1 个字段对数组(按升序)排序
- 打印数组
- 根据结构的另一个字段对数组进行排序(降序)
- 打印数组
我目前卡在第 5 步。
这是我目前的程序。
#include <iostream>
#include <sstream>
using namespace std;
struct data {
int a,b,c;
} number [10];
int main(){
int enterData;
int *temp = new int[3];
for (int i = 0; i<10; i++){
//for (int n = 0; n<=3; n++){
cin>> number[i].a;
cin>> number[i].b;
cin>> number[i].c;
if(i >= 10) break;
//}
}
for (int i = 0; i<10; i++){
// for (int n = 0; n<=3; n++){
cout << number[i].a << " ";
cout << number[i].b << " ";
cout << number[i].c << " ";
cout << "\n";
if(i >= 10) break;
// }
}
cout <<"\n\n\n";
for (int i = 0; i<9; i++){
if (number[i].a > number[i+1].a){
temp[0] = number[i].a;
temp[1] = number[i].b;
temp[2] = number[i].c;
number[i].a = number[i+1].a;
number[i].b = number[i+1].b;
number[i].c = number[i+1].c;
number[i+1].a = temp[0];
number[i+1].b = temp[1];
number[i+1].c = temp[2];
}
}
for (int i = 0; i<10; i++){
// for (int n = 0; n<=3; n++){
cout << number[i].a << " ";
cout << number[i].b << " ";
cout << number[i].c << " ";
cout << "\n";
if(i >= 10) break;
// }
}
}
这是我当前的输出。
程序中输入的数字 3 4 8 7 6 4 2 9 0 1 4 2 5 3 6 7 3 2 3 4 5 6 7 8 9 5 4 7 5 1
首先“排序” 3 4 8 2 9 0 1 4 2 5 3 6 7 6 4 3 4 5 6 7 8 7 3 2 7 5 1 9 5 4
最佳答案
在这段代码中
for (int i = 0; i<10; i++){
//for (int n = 0; n<=3; n++){
cin>> number[i].a;
cin>> number[i].b;
cin>> number[i].c;
if(i >= 10) break;
//}
}
有这个声明是没有意义的 if(i >= 10) break
,因为当满足退出条件时外观存在,即 i<10
.
问题出在这里:
for (int i = 0; i<9; i++){
if (number[i].a > number[i+1].a){
temp[0] = number[i].a;
temp[1] = number[i].b;
temp[2] = number[i].c;
number[i].a = number[i+1].a;
number[i].b = number[i+1].b;
number[i].c = number[i+1].c;
number[i+1].a = temp[0];
number[i+1].b = temp[1];
number[i+1].c = temp[2];
}
}
你只在数组中循环一次。最简单的排序算法,冒泡排序,需要一个双循环:
for (int i = 0; i<10; i++){
for (int j = 0; j<9; j++){
if (number[j].a > number[j+1].a){
temp[0] = number[j].a;
temp[1] = number[j].b;
temp[2] = number[j].c;
number[j].a = number[j+1].a;
number[j].b = number[j+1].b;
number[j].c = number[j+1].c;
number[j+1].a = temp[0];
number[j+1].b = temp[1];
number[j+1].c = temp[2];
}
}
请注意,这不是必需的:
int *temp = new int[3];
您可以使用您的 data
结构。
data temp;
for (int i = 0; i<10; i++){
for (int j = 0; j<9; j++){
if (number[j].a > number[j+1].a){
temp.a = number[j].a;
temp.b = number[j].b;
temp.c = number[j].c;
number[j].a = number[j+1].a;
number[j].b = number[j+1].b;
number[j].c = number[j+1].c;
number[j+1].a = temp.a;
number[j+1].b = temp.b;
number[j+1].c = temp.c;
}
}
关于c++ - 结构未完成排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22295095/