结构未完成排序

时间:2014-03-10 08:17:26

标签: c++ arrays sorting struct

基本上这是我的作业我不是要求你完成这个作业,只是帮助我。

对结构数组进行排序

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

  1. 使用(至少)3个字段
  2. 创建一个结构
  3. 创建一个结构数组
  4. 将数据读入结构数组(10到15条记录)
  5. 打印数组
  6. 在struct
  7. 的1个字段上对数组进行排序(按升序排序)
  8. 打印数组
  9. 在struct
  10. 的另一个字段上对数组进行排序(按降序排列)
  11. 打印数组
  12. 我目前停留在第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

3 个答案:

答案 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/对结构数组进行排序,以及何时不需要编写自己的排序代码。