随机取基准 快速排序的一种算法也算一种优化

随机取基准
思想:取待排序列中任意一个元素作为基准
引入的原因:在待排序序列是不分有序时,固定选取基准是快排效率低下,要换届这种情况,就引入了随机选取基准



package
sort; import java.util.Arrays; public class TestQuickSort2 { //返回基准的下标 public static int partion(int []array,int low,int hign){ int tmp=array[low]; while(low<hign){ while(low<hign&&array[hign]>=tmp){ --hign; } if(low>=hign){ break; }else{ array[low]=array[hign]; } while(low<hign&&array[low]<=tmp){ ++low; } if(low>=hign){ break; }else{ array[hign]=array[low]; } } array[low]=tmp; return low; } public static void swap(int[]array,int start,int end){ int tmp=array[start]; array[start]=array[end]; array[end]=tmp; } public static void Quick(int[]array,int start,int end){ swap(array,start,(int)Math.random()%(end-start+1)+start); int par=partion(array,start,end); if(par>start+1){//左边还需要快排 Quick(array,start,par-1); } if(par<end-1){//右边还需要快排 Quick(array,par+1,end); } } public static void QuickSort2(int[]array){ Quick(array,0,array.length-1); } public static void main(String[] args) { // TODO Auto-generated method stub int[]array={20,3,5,0,32,22,11,8,7,9}; QuickSort2(array); System.out.println(Arrays.toString(array)); } }

猜你喜欢

转载自www.cnblogs.com/ioio2/p/9054921.html