C语言中使用qsort()

        之前,我们已经写过快速排序的程序,而在C语言的库函数中就有快速排序的库函数,即为qsort, 其用法如下:


功 能: 快速排序
头文件:stdlib.h
用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
参数: 
1 待排序数组首元素的地址 
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序


       示例程序如下:

   
   
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int compInc(const void *a, const void *b)
  4. {
  5. return *( int *)a - *( int *)b;
  6. }
  7. int compDec(const void *a, const void *b)
  8. {
  9. return *( int *)b - *( int *)a;
  10. }
  11. int main()
  12. {
  13. int a[ 5] = { 11, 2, 13, 4, 7};
  14. int b[ 5] = { 11, 2, 13, 4, 7};
  15. int len = 5;
  16. int i;
  17. printf( "递增排序结果:\n");
  18. qsort(a, len, sizeof(a[ 0]), compInc);
  19. for(i = 0; i < len; i ++)
  20. {
  21. printf( "%d ", a[i]);
  22. }
  23. printf( "\n\n");
  24. printf( "递减排序结果:\n");
  25. qsort(b, len, sizeof(b[ 0]), compDec);
  26. for(i = 0; i < len; i ++)
  27. {
  28. printf( "%d ", b[i]);
  29. }
  30. printf( "\n");
  31. return 0;
  32. }
     结果为:
递增排序结果:
2 4 7 11 13

递减排序结果:
13 11 7 4 2


      下面,继续看qsort的一些用法:

   
   
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define M 12
  5. #define N 20
  6. int compareInc(const void *a, const void *b)
  7. {
  8. return strlen(( char *)a) - strlen(( char*)b);
  9. }
  10. int compareDec(const void *a, const void *b)
  11. {
  12. return strlen(( char *)b) - strlen(( char*)a);
  13. }
  14. int main(void)
  15. {
  16. int i;
  17. char s[M][N]=
  18. {
  19. "January",
  20. "February",
  21. "March",
  22. "April",
  23. "May",
  24. "June",
  25. "July",
  26. "August",
  27. "September",
  28. "October",
  29. "November",
  30. "December"
  31. };
  32. qsort(s, M, sizeof( char) * N, compareInc);
  33. for(i = 0;i < M; i++)
  34. printf( "%s\n", s[i]);
  35. printf( "\n");
  36. qsort(s, M, sizeof( char) * N, compareDec);
  37. for(i = 0;i < M; i++)
  38. printf( "%s\n", s[i]);
  39. return 0;
  40. }
      结果为:
May
July
June
March
April
August
October
January
December
November
February
September

September
February
November
December
October
January
August
April
March
June
July
May



   
   
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define M 12
  5. #define N 20
  6. int compare1(const void *a, const void *b)
  7. {
  8. return *( char *)a - *( char*)b;
  9. }
  10. int compare2(const void *a, const void *b)
  11. {
  12. return *( char *)b - *( char*)a;
  13. }
  14. int main(void)
  15. {
  16. int i;
  17. char s[M][N]=
  18. {
  19. "January",
  20. "February",
  21. "March",
  22. "April",
  23. "May",
  24. "June",
  25. "July",
  26. "August",
  27. "September",
  28. "October",
  29. "November",
  30. "December"
  31. };
  32. qsort(s, M, sizeof( char) * N, compare1);
  33. for(i = 0;i < M; i++)
  34. printf( "%s\n", s[i]);
  35. printf( "\n");
  36. qsort(s, M, sizeof( char) * N, compare2);
  37. for(i = 0;i < M; i++)
  38. printf( "%s\n", s[i]);
  39. return 0;
  40. }
       结果为:
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程序:

   
   
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 6
  4. typedef struct
  5. {
  6. char name[ 15];
  7. int score;
  8. }Student;
  9. int compare1(const void *a,const void *b)
  10. {
  11. return ((Student*)a)->score - ((Student*)b)->score;
  12. }
  13. int compare2(const void *a,const void *b)
  14. {
  15. return *(((Student*)a)->name) - *(((Student*)b)->name);
  16. }
  17. void print(Student s)
  18. {
  19. printf( "%-15s : %d\n", s.name, s.score);
  20. }
  21. int main()
  22. {
  23. Student s[N] =
  24. {
  25. "Zhang San", 94,
  26. "Li Si", 80,
  27. "You", 94,
  28. "I", 100,
  29. "He", 72,
  30. "She", 60
  31. };
  32. int i;
  33. qsort(s, N, sizeof(Student), compare1);
  34. for(i = 0; i < N; i++)
  35. {
  36. print(s[i]);
  37. }
  38. printf( "\n");
  39. qsort(s, N, sizeof(Student), compare2);
  40. for(i = 0; i < N; i++)
  41. {
  42. print(s[i]);
  43. }
  44. return 0;
  45. }
       结果为:
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


猜你喜欢

转载自blog.csdn.net/baidu_38634017/article/details/88207480