Chinaunix首页 | 论坛 | 博客
  • 博客访问: 87354
  • 博文数量: 60
  • 博客积分: 4002
  • 博客等级: 中校
  • 技术积分: 645
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 18:11
文章分类

全部博文(60)

文章存档

2011年(60)

我的朋友

分类: LINUX

2011-01-02 18:43:52

    快速排序:和归并排序相反,快速排序注重前期的分,归并排序注重后期的并,具体实现参加代码。

  1. #include <stdio.h>

  2. void quickSort(int *a, int start, int end);

  3. int
  4. main(int argc, char **argv)
  5. {
  6.     int a[] = {2,4,6,8,1,3,5,7,9,0};
  7.     int n = sizeof(a) / sizeof(a[0]);

  8.     quickSort(a, 0, n-1);

  9.     printf("Result:");
  10.     int i;
  11.     for (i = 0; i < n; i++) {
  12.         printf("%d,", a[i]);
  13.     }
  14.     printf("\n");

  15.     return 0;
  16. }

  17. int
  18. partition(int *a, int start, int end)
  19. {
  20.     int tag = a[end];
  21.     int i = start - 1;
  22.     int j;
  23.     int tmp;

  24.     for (j = start; j < end; j++) {
  25.         if (a[j] < tag) {
  26.             ++i;
  27.             tmp = a[i];                    
  28.             a[i] = a[j];
  29.             a[j] = tmp;
  30.         }
  31.     }

  32.     a[end] = a[i+1];
  33.     a[i+1] = tag;
  34.     tag = a[end];

  35.     return (i+1);
  36. }

  37. void
  38. quickSort(int *a, int start, int end)
  39. {
  40.     int mid;
  41.     if (start < end) {
  42.         mid = partition(a, start, end);    
  43.         quickSort(a, start, mid-1);
  44.         quickSort(a, mid+1, end);
  45.     }
  46. }
注:平均时间复杂度为:O(nlgn),不稳定。
阅读(643) | 评论(0) | 转发(0) |
0

上一篇:冒泡排序

下一篇:QA流程

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