注意:数组中可以存储数字,字符,或者结构体都行。
1.普通数组:
#include
#include
int cmpInc(const void *a, const void *b)//递增
{
return *(int *)a - *(int *)b;
}
int cmpDec(const void *a, const void *b)//递减
{
return *(int *)b - *(int *)a;
}
int main()
{
int a[5] = { 5 ,4 ,3,4,10};
int i;
printf("递减排序结果:\n");
qsort(a, 5, sizeof(a[0]), cmpDec);
for (i = 0; i < 5; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
2.字符串长度排序(这里是先比较第一个,然后第二个。。。。):
#include
#include
#include
#define M 12
#define N 20
int cmpInc(const void *a, const void *b)
{
return strlen((char *)a) - strlen((char*)b);//字符串长度递增
}
int cmpDec(const void *a, const void *b)
{
return strlen((char *)b) - strlen((char*)a);//字符串长度递减
}
int main(void)
{
int i;
char s[M][N] =
{
"1",
"12",
"123",
"1234",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8"
};
qsort(s, M, sizeof(char) * N, cmpInc);//递增
for (i = 0; i < M; i++)
printf("%s\n", s[i]);
printf("\n");
qsort(s, M, sizeof(char) * N, cmpDec);//递减
for (i = 0; i < M; i++)
printf("%s\n", s[i]);
return 0;
}
字符串大小排序:
#include
#include
#include
#define M 12
#define N 20
int cmpinc(const void *a, const void *b)//递增
{
return *(char *)a - *(char*)b;//字符串大小比较
}
int cmpdec(const void *a, const void *b)//递减
{
return *(char *)b - *(char*)a;
}
int main(void)
{
int i;
char s[M][N] =
{
"1",
"12",
"123",
"1234",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8"
};
qsort(s, M, sizeof(char) * N, cmpinc);//递增
for (i = 0; i < M; i++)
printf("%s\n", s[i]);
printf("\n");
qsort(s, M, sizeof(char) * N, cmpdec);//递减
for (i = 0; i < M; i++)
printf("%s\n", s[i]);
return 0;
}
结构体:
#include
#include
#define N 6
typedef struct
{
char name[15];
int score;
}Student;
int compare1(const void *a, const void *b)
{
return ((Student*)a)->score - ((Student*)b)->score;//以结构体的成绩排序
}
int compare2(const void *a, const void *b)
{
return *(((Student*)a)->name) - *(((Student*)b)->name);//以结构体的学生姓名排序
}
void print(Student s)
{
printf("%-15s : %d\n", s.name, s.score);
}
int main()
{
Student s[N] =
{
"Zhang San", 94,
"Li Si", 80,
"You", 94,
"I", 100,
"He", 72,
"She", 60
};
int i;
qsort(s, N, sizeof(Student), compare1);
for (i = 0; i < N; i++)
{
print(s[i]);
}
printf("\n");
qsort(s, N, sizeof(Student), compare2);
for (i = 0; i < N; i++)
{
print(s[i]);
}
return 0;
}