Chinaunix首页 | 论坛 | 博客
  • 博客访问: 146620
  • 博文数量: 28
  • 博客积分: 1646
  • 博客等级: 上尉
  • 技术积分: 405
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-12 14:28
文章分类

全部博文(28)

文章存档

2013年(28)

我的朋友

分类: C/C++

2013-03-12 17:56:51

快速排序算法

原理:从待排序集合中选取一个元素为基准,然后对待排序元素进行一趟排序,排序结果保证基准元素在正确的位置上,其前面的元素都小于基准,后面的元素都大于基准。这样将集合划分为两个子集,然后对子集进行递归排序。

通常快速排序算法采用递归方式实现, 非递归实现需要模拟栈的行为,将每次划分的起止坐标入栈,然后取栈元素进行排序。



点击(此处)折叠或打开

  1. inline int partition(int a[], int i, int j)
  2. {
  3.     int pivot = a[i];
  4.     while (i < j){
  5.         while (i<j && a[j]>pivot) --j;
  6.         if (i < j){
  7.             a[i++] = a[j];
  8.         }
  9.         while (i<j && a[i]<pivot) ++i;
  10.         if (i < j){
  11.             a[j--] = a[i];
  12.         }
  13.     }
  14.     a[i] = pivot;
  15.     return i;
  16. }

  17. void quicksort(int a[], int low, int high)
  18. {
  19.     int pivotpos;

  20.     if (low < high){
  21.         pivotpos = partition(a, low, high);
  22.         quicksort(a, low, pivotpos-1);
  23.         quicksort(a, pivotpos+1, high);
  24.     }
  25. }


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

上一篇:插入排序

下一篇:冒泡排序

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