c++ - 结构未完成排序

标签 c++ arrays sorting struct

基本上这是我的任务我不是要你完成这个任务,只是帮助我。

对结构数组进行排序

在此作业中,您将创建一个结构数组并排序 数组。

  1. 创建一个包含(至少)3 个字段的结构
  2. 创建一个结构数组
  3. 将数据读入结构数组(10 到 15 条记录)
  4. 打印数组
  5. 根据结构的 1 个字段对数组(按升序)排序
  6. 打印数组
  7. 根据结构的另一个字段对数组进行排序(降序)
  8. 打印数组

我目前卡在第 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/

相关文章:

c++ - 旋转的二维矩形相交点或区域

c++ - 在游戏机上加载的最佳数据文件格式

c++ - 将数组转换为 C++ 中的集合

C++ ffmpeg实时视频传输

php - while 循环重复相同的数据

ios - 在 AddressBook iOS 中根据最近使用/最常用/紧急程度对联系人进行排序

sorting - 如何在 gnuplot 中对数据 block 进行排序?

c++ - 不确定查找功能在 CPP 中如何工作

arrays - 解析多个 JSON 对象

python - Python3.x 中使用键值对 DefaultDict() 进行排序