使用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