快速排序
来源:互联网 发布:网络强国是哪几个 编辑:程序博客网 时间:2024/05/20 11:19
采用“分而治之”的思想,将大的分为小的,小的再拆分为更小的。
原理:对于给定的一组记录,通过一趟排序,将原序列分为两部分,其中一部分的所有记录均比另一部分小;再依次对前后两部分的记录进行快速排序,递归该过程。
1、拆分
拆分算法由两个指针开始工作,两个指针分别指向数组两头(非C++中的指针),leftPtr向右移动,直至遇到比pivot大的,暂停;rightPtr向左移动,直至遇到比pivot小的,暂停;两者交换。
leftPtr初始化时是在第一个数据项的左边一位,rightPtr初始化是在最后一个数据项的右边一位,因为它们工作之前,都要分别加一和减一:
while(theArray[++leftPtr]<pivot)//find bigger one;while(theArray[--rightPtr]>pivot)//find smaller one;swap(leftPtr,rightPtr);//swap elements
拆分算法:
public int partionIt(int left,int right,long pivot){int leftPtr = left - 1;int rightPtr = right + 1;while(true){while(leftPtr < right && theArray[++leftPtr] < pivot);while(rightPtr > left && theArray[--rightPtr] > pivot);if(leftPtr >= rightPtr)break;elseswap(leftPtr,rightPtr);}return leftPtr;}
交换:
public void swap(int dex1,int dex2){long temp;temp = theArray[dex1];theArray[dex1] = theArray[dex2];theArray[dex2] = temp;}
2、快速排序:
public void quickSort(int left,int right){if(right-left<=0)return;else{int partition = partionIt(left,right);quickSort(left,partition-1);quickSort(partition+1,right);}}
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- spfa
- SQL常用技巧总结
- 【light-oj】-1331 - Agent J(几何,水)
- Poj 1609 Tiling Up Blocks (LIS--可以相等)
- spfa(前向星)
- 快速排序
- 电影下载
- Laravel 5.3 windows环境安装
- 计算斐波那契数列的两种常用方式的性能比较
- 微信bug总结一
- PyQt实现的生产者消费者模型
- 颜色空间那些事儿
- [Leetcode] Majority Element
- dfs-poj-1321棋盘问题