排序算法之六 快速排序
来源:互联网 发布:java中如何声明变量 编辑:程序博客网 时间:2024/06/05 15:16
快速排序(Quick sort),是一种分治算法的实现,其思想为:在待排序数列里面选择一个基准(pivot)将数列分为两个部分,其中基准之前的部分都比基准值小,后半部分大于基准值,这个操作称之为分区(partition);然后分别对前后半部分进行分区操作。
算法示例:
待排序数组:10 6 3 7 2 8 9 2 4 1 n = 10
首先进行分区。令 left 表示左边界,right 表示右边界,pivot表示基准值。left = 0,right = 9,pivot = d[left]。
然后,从右向左遍历(right--)找到第一个小于pivot的位置,此时为 right = 9。令 d[left] = d[right],left++。
得到: 1 6 3 7 2 8 9 2 4 1
然后,从左向右遍历(left ++)找到第一个大于pivot的位置,此时 left = 9。因为 left == right,所以退出循环。
最后,令 d[left] = pivot,得到分好区的数列:1 6 3 7 2 8 9 2 4 10,返回基准值的位置 left = 9。
分好区之后,以基准值位置为界对前后两部分的数组进行分区操作,最后就得到了排好序的数组。
int partition(double *dataIn, int iLeft, int iRight){/* 2012/08/24, by wbprime@myopera.com */ int left = iLeft, right = iRight; double pivot = dataIn[left]; while (left < right) { /* from right to left */ while (left < right && dataIn[right] > pivot) right--; if (left < right) dataIn[left++] = dataIn[right]; /* from left to right */ while (left < right && dataIn[left] < pivot) left ++; if (left < right) dataIn[right--] = dataIn[left] ; } dataIn[left] = pivot; return left;}int quickSort(double *dataIn, int iLeft, int iRight){/* 2012/08/24, by wbprime@myopera.com */ if (iLeft < iRight) { int index = partition(dataIn, iLeft, iRight); quickSort(dataIn, iLeft, index-1); quickSort(dataIn, index+1, iRight); }}void sort(double *dataIn, int sizeIn){/* 2012/08/24, by wbprime@myopera.com */ quickSort(dataIn, 0, sizeIn-1);}
- 排序算法之六 快速排序
- 排序算法之六--快速排序
- 排序算法六:快速排序
- 排序算法六 快速排序
- 经典算法系列之六 快速排序 快速排序
- 算法系列之六:快速排序
- 排序算法之六 —— 快速排序算法
- 【数据结构与算法】排序算法之六:快速排序
- 排序六之快速排序
- 白话经典算法系列之六 快速排序 快速搞定
- 白话经典算法系列之六 快速排序 快速搞定
- 白话经典算法系列之六 快速排序 快速搞定
- 白话经典算法系列之六 快速排序 快速搞定
- 白话经典算法系列之六 快速排序 快速搞定
- 白话经典算法系列之六 快速排序 快速搞定
- 白话经典算法系列之六 快速排序 快速搞定
- 白话经典算法系列之六 快速排序 快速搞定
- 白话经典算法系列之六 快速排序 快速搞定
- 当程序出问题时程序员最喜欢说的20句话
- Locating files using the find command(linux find命令)
- java中文乱码的原因及解决方法
- 程序猿
- 1.struts国际化:配置
- 排序算法之六 快速排序
- 硅谷怎么看Y Combinator Demo Day
- 网络协议头部结构
- 测试
- secureCRT 连接ssh 的 linux设置
- 如何在25步之内开发出一个网站
- IE6兼容问题解决汇总
- Ubuntu数字小键盘不能用解决方法(转载)
- OCP-047 add column on a table, and cannot contain null