龙空技术网

C++|结构体按索引进行排序和访问

小智雅汇 121

前言:

眼前同学们对“c 结构体排序”可能比较讲究,同学们都想要学习一些“c 结构体排序”的相关资讯。那么小编在网络上汇集了一些关于“c 结构体排序””的相关知识,希望你们能喜欢,看官们快快来了解一下吧!

类型相同的结构体变量可以整体赋值,“类型相同的变量” 是指用同一类型标识符说明的变量。

结构体数组排序时,可以通过结构变量的整体交换进行,但效率较低。

可以使用索引机制,建立结构体指针数组,按索引排序并访问:

I 建立结构体索引数组;

II 以关键字作依据进行数据比较,移动索引;

III 通过索引访问数据;

# include <iostream>using namespace std;#define NUM 3struct person         // 结构定义{     char name[10];     unsigned int id;     double salary; };person allone[NUM];   // 结构数组声明person * pa[NUM] = {&allone[0] , &allone[1] , &allone[2]}; // 结构体索引数组person* struInput(person allone[]) // 结构体数据输入{    for(int i=0; i<NUM; i ++ )    {         cout << i << ": name: ";         gets(allone[i].name );        cout << "id: ";           cin >> allone[i].id;        cout << "salary: ";           cin >> allone[i].salary;        cout << endl;        cin.ignore(32767, '\n');  // ignore up to 32767 characters until a \n is removed    }    return allone;}person* struSort(person allone[]) // 结构体变量整体交换的冒泡排序{    person temp;                  // 结构变量声明    cout << "Sort:\n";    for(int i=1; i<NUM; i++ )    // 以成员salary作关键字排序    {         for(int j=0; j<NUM-i; j++)        {             if(allone[j].salary > allone[j+1].salary )   // 结构变量的整体交换             {                 temp = allone[j];                  allone[j] = allone[j+1];                   allone[j+1] = temp; }        }    }    return allone;}person* struSortByIndex(person allone[]) // 按结构体变量索引的冒泡排序{    person * temp;    for(int i=1; i<NUM; i++)    {          for(int j=0; j<NUM-i;j++ )                    {              if (pa[j]->salary > pa[j+1]->salary)            {                  temp = pa[j];                      pa[j] = pa[j+1];                     pa[j+1] = temp ;            }        }    }    return allone;}int main(){     struInput(allone);    //struSort(allone);    struSortByIndex(allone);        for(int i = 0; i < NUM; i ++ )        //  输出排序后数据        cout << allone[i].name << '\t' << allone[i].id              << '\t' << allone[i].salary << endl;    for(int j=0; j<NUM; j++)              // 通过索引访问数据        cout << pa[j]->name << '\t' << pa[j]->id              << '\t' << pa[j]->salary << endl;        system("pause");    return 0;}/*wwu015623fwu028679zwu036666*//*0: name: wwuid: 01salary: 56231: name: fwuid: 02salary: 86792: name: zwuid: 03salary: 6666wwu     1       5623fwu     2       8679zwu     3       6666wwu     1       5623zwu     3       6666fwu     2       8679*/

-End-

标签: #c 结构体排序 #结构体排序 c语言