之前,我们已经写过快速排序的程序,而在C语言的库函数中就有快速排序的库函数,即为qsort, 其用法如下:
功 能: 快速排序
头文件:stdlib.h
用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
参数:
1 待排序数组首元素的地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序
示例程序如下:
#include <stdio.h>
#include <stdlib.h>
int compInc(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int compDec(const void *a, const void *b)
{
return *(int *)b - *(int *)a;
}
int main()
{
int a[5] = {11,2,13,4,7};
int b[5] = {11,2,13,4,7};
int len = 5;
int i;
printf("递增排序结果:\n");
qsort(a, len, sizeof(a[0]), compInc);
for(i = 0; i < len; i ++)
{
printf("%d ", a[i]);
}
printf("\n\n");
printf("递减排序结果:\n");
qsort(b, len, sizeof(b[0]), compDec);
for(i = 0; i < len; i ++)
{
printf("%d ", b[i]);
}
printf("\n");
return 0;
}
结果为:
递增排序结果:
2 4 7 11 13
递减排序结果:
13 11 7 4 2
下面,继续看qsort的一些用法:
2 4 7 11 13
递减排序结果:
13 11 7 4 2
下面,继续看qsort的一些用法:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 12
#define N 20
int compareInc(const void *a, const void *b)
{
return strlen((char *)a) - strlen((char*)b);
}
int compareDec(const void *a, const void *b)
{
return strlen((char *)b) - strlen((char*)a);
}
int main(void)
{
int i;
char s[M][N]=
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
qsort(s, M, sizeof(char) * N, compareInc);
for(i = 0;i < M; i++)
printf("%s\n", s[i]);
printf("\n");
qsort(s, M, sizeof(char) * N, compareDec);
for(i = 0;i < M; i++)
printf("%s\n", s[i]);
return 0;
}
结果为:
May
July
June
March
April
August
October
January
December
November
February
September
September
February
November
December
October
January
August
April
March
June
July
May
July
June
March
April
August
October
January
December
November
February
September
September
February
November
December
October
January
August
April
March
June
July
May
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 12
#define N 20
int compare1(const void *a, const void *b)
{
return *(char *)a - *(char*)b;
}
int compare2(const void *a, const void *b)
{
return *(char *)b - *(char*)a;
}
int main(void)
{
int i;
char s[M][N]=
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
qsort(s, M, sizeof(char) * N, compare1);
for(i = 0;i < M; i++)
printf("%s\n", s[i]);
printf("\n");
qsort(s, M, sizeof(char) * N, compare2);
for(i = 0;i < M; i++)
printf("%s\n", s[i]);
return 0;
}
结果为:
April
August
December
February
July
June
January
March
May
November
October
September
September
October
November
May
March
June
July
January
February
December
August
April
好,欣赏最后一个qsort程序:
August
December
February
July
June
January
March
May
November
October
September
September
October
November
May
March
June
July
January
February
December
August
April
好,欣赏最后一个qsort程序:
#include <stdio.h>
#include <stdlib.h>
#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;
}
结果为:
She : 60
He : 72
Li Si : 80
You : 94
Zhang San : 94
I : 100
He : 72
I : 100
Li Si : 80
She : 60
You : 94
Zhang San : 94
He : 72
Li Si : 80
You : 94
Zhang San : 94
I : 100
He : 72
I : 100
Li Si : 80
She : 60
You : 94
Zhang San : 94