基本上这是我的作业我不是要求你完成这个作业,只是帮助我。
对结构数组进行排序
在此作业中,您将创建一个结构和排序数组 数组。
我目前停留在第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
答案 0 :(得分: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;
//}
}
使用此声明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;
}
}
答案 1 :(得分:0)
迫使其发挥作用的最快方法 - 在排序for(int j=0; j<10; j++)
之上添加for
。
答案 2 :(得分:-1)
您可以使用qsort http://www.cplusplus.com/reference/cstdlib/qsort/对结构数组进行排序,以及何时不需要编写自己的排序代码。