结构体排序

Posted jyssh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体排序相关的知识,希望对你有一定的参考价值。

sort的使用

1.对数组进行从小到大排序

sort(a,a+n);//对数组下标0到下标n-1进行从小到大排序
sort(a+1,a+1+n); //对数组下标1到下标n进行从小到大排序

2.cmp自定义比较函数实现自定义排序

bool cmp1(int a,int b)return a>b;
bool cmp2(int a,int b)return a<b;
sort(a+1,a+1+n,cmp1);对a下标1到n进行从大到小排序
sort(a+1,a+1+n,cmp2);对a下标1到n进行从小到大排序

3.cmp自定义比较函数实现自定义结构体排序

 

C语言结构体排序

求问各位dalao
typedef struct
char thread_name[3];
unsigned int require_moment;
unsigned int persist_time;
TEST_INFO;
TEST_INFO test_data[]=
"r1",0,3,
"r2",1,6,
"w1",3,5,
"r3",2,5,
"w2",5,5,
"w3",4,5,
"r4",7,5,
"r5",9,5,
"w4",8,5,
"w5",12,5
;
要求对require_moment从小到大进行排序,然后输出排序后的thread_name,应该怎么做

代码如下:

#include<stdio.h> 

typedef struct
char thread_name[3];
unsigned int require_moment;
unsigned int persist_time;
TEST_INFO;

TEST_INFO test_data[] = 
 "r1", 0, 3 ,
 "r2", 1, 6 ,
 "w1", 3, 5 ,
 "r3", 2, 5 ,
 "w2", 5, 5 ,
 "w3", 4, 5 ,
 "r4", 7, 5 ,
 "r5", 9, 5 ,
 "w4", 8, 5 ,
 "w5", 12, 5 
;

int main()

int i, j, size;
TEST_INFO temp;

// 数组元素个数
size = 10;

// 排序

for (i = 0; i < size - 1; i++) 
for (j = i + 1; j < size; j++) 
if (test_data[i].require_moment > test_data[j].require_moment) 
memcpy(&temp, &test_data[i], sizeof(TEST_INFO));
memcpy(&test_data[i], &test_data[j], sizeof(TEST_INFO));
memcpy(&test_data[j], &temp, sizeof(TEST_INFO));




// 输出

for (i = 0; i < size; i++) 
printf("%s ", test_data[i].thread_name);


printf("\\n");

return 0;

运行结果:

参考技术A 就比较test_data结构体数组里面的值
直接调用test_data[i].require_moment,就变成数字之间的比较大小
可以使用简单的冒泡排序,然后记下排序后数组的下标,依次输出
参考技术B

#include<stdio.h>

typedef struct
    char thread_name[3];
    unsigned int require_moment;
    unsigned int persist_time;
TEST_INFO;
TEST_INFO test_data[]=
"r1",0,3,
"r2",1,6,
"w1",3,5,
"r3",2,5,
"w2",5,5, 
"w3",4,5,
"r4",7,5,
"r5",9,5,
"w4",8,5,
"w5",12,5
;

int main()
    int i,j;
    for(i=0;i<10;i++)
        for(j=i+1;j<10;j++)
            if(test_data[i].require_moment>test_data[j].require_moment)
                TEST_INFO t=test_data[i];
                test_data[i]=test_data[j];
                test_data[j]=t;
            
        
    
    for(i=0;i<10;i++)
        printf("%s %d %d\\n",test_data[i].thread_name,test_data[i].require_moment,test_data[i].persist_time);
    

追问

这是冒泡排序吗?

追答

对,你也可以用其它排序方式,这个不影响结果

本回答被提问者采纳

以上是关于结构体排序的主要内容,如果未能解决你的问题,请参考以下文章

sort函数能对结构体进行排序吗?

如何用sort对结构体进行排序

C语言结构体数组排序

求教一个问题,如何用sort对结构体数组排序

C语言 结构体如何排序

C语言结构体排序