使用qsort函数:
#include <stdio.h> #include <stdlib.h> #include <string.h> //数据结构定义 typedef struct { char str[10]; //一些成员 //..............//其他一些成员 //..............//其他一些成员 int key; //需要比较的“键” }MY_TYPE; //产生于【M,N】之间区间上的函数 int my_rand(int M,int N) { return (int)((double)rand()/(double)RAND_MAX*(N-M+1)+M); } //比较函数 int intcmp(const void *x, const void *y) { MY_TYPE *M1 = (MY_TYPE *)x; MY_TYPE *M2 = (MY_TYPE *)y; if (M1->key > M2->key) { return 1; } else if (M1->key < M2->key) { return -1; } else { return 0; } } void main() { //定义10个自定义数据结构变量 MY_TYPE mt[10]; memset(mt, 0x00, sizeof(mt)); //产生10个结构变量,每个变量的Key是【1000~9999】之间的随机数 int i=0; int tmp = 0; char strtmp[10] = {0}; for(; i<10; i++) { tmp = my_rand(1000, 9999); _itoa( tmp, strtmp, 10 ); strcpy(mt[i].str, strtmp); mt[i].key = tmp; } //打印 printf("排序前:\n"); for(i=0; i<10; i++) { printf("%d---%s\n", mt[i].key, mt[i].str); } //排序 qsort(mt, //首地址 sizeof(mt)/sizeof(mt[0]), //排序的(结构)个数 sizeof(mt[0]), //每个结构的字节个数 intcmp //比较函数 ); //排序后打印 printf("\n\n排序后:\n"); for(i=0; i<10; i++) { printf("%d---%s\n", mt[i].key, mt[i].str); } }
输出结果:
排序前: 1011---1011 6072---6072 2739---2739 8278---8278 6265---6265 5318---5318 4152---4152 9063---9063 8405---8405 7719---7719 排序后: 1011---1011 2739---2739 4152---4152 5318---5318 6072---6072 6265---6265 7719---7719 8278---8278 8405---8405 9063---9063 Press any key to continue