快速排序挖坑法理解与实现
来源:互联网 发布:h5 刮刮卡 源码 编辑:程序博客网 时间:2024/05/16 13:41
看了这片文章,确实非常形象,http://blog.csdn.net/morewindows/article/details/6684558
自己实现的代码如下
package sort;/*快速排序 * 简单理解为找位置排序,每趟排序都为阈值pivot找到其该放的位置,即其左边的全都<=pivot,其右边的全都>pivot; * 然后对左右两边分别递归执行之前的步骤; * 1 low < high 才需要排序,这个同时也是继续递归的条件,若没有则会导致无线递归; * 2 下标R=low,L=high, 确定阈值pivot,这里使用数组的第一个元素array[low],pivot = array[low].赋值后low位置(也就是R)可以看做已空,虚位以待 * 3 以下所有操作都是在R < L的情况下才继续进行,若R=L则找到了pivot在数组中真正应该放的位置 * 4 从后往前找到 <= pivot的值,将其放在array[R] * 5 从前->后,找到>pivot的值,将其放在array[L] * 6 当R=L则找到了pivot在数组中真正应该放的位置。array[R] = pivot; * 7 分别对array[R]左右两边的序列做同上的操作,即递归 * */public class QuickSort {public static void quickSort2(int[] array,int low,int high){try{if(low < high){ //排序条件,也是递归条件int R = low,L = high;int pivot = array[R];//挖出R位置的值,放入pivot//当R=L时表示找到pivot在数组中真正应该放的位置。array[R] = pivotwhile(R < L){//前<-后,从后往前找 <= pivot的值放入Rwhile(R < L && array[L] > pivot ){L--;}if(R < L ){array[R] = array[L];}//前->后,从前往后找到大于pivot的值,存入Lwhile(R <L && array[R] <= pivot){R++;}if(R < L){array[L] = array[R];}}array[L] = pivot;quickSort2(array,low,L - 1);quickSort2(array,L + 1,high);}}catch(Exception e){e.printStackTrace();}}//将阈值pivot放到正确的位置上,即左边元素<=阈值pivot,右边>阈值pivotpublic static void quickSort(int[] array,int low,int high){try{if(low < high){ //这里是做什么用?没有的话high会变成-1int position = low;//阈值的初始位置为low,即取第一个元素作为阈值。int pivot = array[position];//取出pivot,使position空出来int R = low,L = high;while(R < L){//从后往前找到 <=pivot 的元素,放在R上while(R != L && array[L] > pivot){L--;}if(R < L){array[R] = array[L];R++;}//从前往后找 >pivot 的元素,放在L上,因为L的位置已空出来while( R != L && array[R] <= pivot){R++;}if(R < L){array[L] = array[R];L--;}}array[L] = pivot;//找到pivot的正确位置quickSort(array,low,L - 1);//对左边继续递归quickSort(array,L + 1,high);//对右边继续递归//return R;}}catch(Exception e){e.printStackTrace();}}public static void main(String[] args) {int[] array = {72,6,57,88,60,42,83,73,48,85};int[] array2 = {72,6,57,88,60,42,83,73,48,85};quickSort(array,0,array.length - 1);for(int i :array){System.out.print(i + ",") ; //System.out.print(i + ',') ; //--> 使用单引号会导致 加上字符,的int值}System.out.println() ; quickSort2(array2,0,array.length - 1);for(int i :array){System.out.print(i + ",") ; //System.out.print(i + ',') ; //--> 使用单引号会导致 加上字符,的int值}}}
0 0
- 快速排序挖坑法理解与实现
- 插入排序法--快速排序法理解
- 快速排序 “挖坑填空”实现
- 快速排序的实现--挖坑法
- 挖坑型快速排序
- 快速排序之“挖坑填数+分治”思想实现
- 快速排序之挖坑填补法
- 快速排序--挖坑填数+分治法
- “挖坑填坑”理解快速排序
- 快速算法实现----挖坑填数
- 排序——快速排序挖坑法的变形
- opencv中CalcOpticalFlowPyrLK实现的光流法理解
- 快速排序理解(挖坑填坑比喻理解)
- 以“挖坑填数”思想理解快速排序
- 快速排序理解(挖坑填数策略)
- 【数据结构】快速(QuickSort)排序之——挖坑法
- 梯度下降法理解
- 梯度下降法理解
- rocketmq原理:name server ,broker, producer, consumer之间通信
- 设计模式——工厂模式
- redis3.0.7源码阅读(二)源码文件归类
- 不一样的S型方阵
- mongoDB数据库基本操作
- 快速排序挖坑法理解与实现
- 无意识的递归
- C++虚函数表
- 【BZOJ4455】小星星,容斥原理+树形DP
- ___security_cookie机制,防止栈溢出
- 8 线性表(3)
- python数据分析与挖掘学习笔记(1)-基础及准备
- 关键字extern
- Lattice系列FPGA入门相关9(人眼分辨帧数)