Chinaunix首页 | 论坛 | 博客
  • 博客访问: 368980
  • 博文数量: 100
  • 博客积分: 2500
  • 博客等级: 大尉
  • 技术积分: 1209
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-15 21:24
文章分类

全部博文(100)

文章存档

2011年(100)

分类: C/C++

2011-04-20 14:43:56


  1. #include <stdio.h>

  2. void myPrint(int *A, int len);
  3. void mySwap(int *A, int *B);
  4. int partition(int *A, int start, int end);
  5. void quickSort(int *A, int start, int end);

  6. int
  7. main(void)
  8. {
  9.         int a[] = {1,3,5,7,9,0,2,4,6,8,0};
  10.         int len = sizeof(a)/sizeof(a[0]);

  11.         myPrint(a, len);
  12.         quickSort(a, 0, len-1);
  13.         myPrint(a, len);

  14.         return (0);
  15. }

  16. void
  17. myPrint(int *A, int len)
  18. {
  19.         printf("Enter: ");
  20.         int i = 0;
  21.         for (i = 0; i < len; i++) {
  22.                 printf("%d,",*(A+i));
  23.         }
  24.         printf("\n");
  25. }

  26. void
  27. mySwap(int *A, int *B)
  28. {
  29.         int tmp;
  30.         tmp = *A;
  31.         *A = *B;
  32.         *B = tmp;
  33. }

  34. int
  35. partition(int *A, int start, int end)
  36. {
  37.         int key = *(A+start);
  38.         int i = start + 1;

  39.         while (i <= end) {
  40.                 if (key >= *(A+i)) {
  41.                         *(A+i-1) = *(A+i);
  42.                         i++;
  43.                 } else {
  44.                         mySwap(A+i, A+end);
  45.                         end--;
  46.                 }
  47.         }
  48.         *(A+i-1) = key;

  49.         return (i-1);
  50. }

  51. void
  52. quickSort(int *A, int start, int end)
  53. {
  54.         int base;
  55.         if (start < end) {
  56.                 base = partition(A, start, end);
  57.                 quickSort(A, start, base-1);
  58.                 quickSort(A, base+1, end);
  59.         }
  60. }
稳定性:非稳定
T(n): O(nlgn)
S(n): O(1)



阅读(1126) | 评论(0) | 转发(0) |
0

上一篇:冒泡排序

下一篇:选择排序

给主人留下些什么吧!~~