1.什么是Partition算法?
partition算法从字面上就非常好理解,就是分割算法!简单讲就是可以把数组按照一定的分成几个部分,其中最常见的就是快速排序中使用的partition算法,这是一个二分partition算法,将整个数组分解为小于某个数和大于某个数的两个部分,然后递归进行排序算法。
下面是一个组数(以第一个数作为基准,从后往前扫和从前往后.)
public static int partition1(int[] array, int lo, int hi) {
//以第一个值为基准值,当然你也可以3取1,
int key = array[lo];
while (lo < hi) {
while (array[hi] > key && hi > lo) {//从后半部分向前扫描
hi--;
}
array[lo] = array[hi];
while (array[lo] <= key && hi > lo) {//从前半部分向后扫描
lo++;
}
array[hi] = array[lo];
}
array[hi] = key;
return hi;
}
public static void main(String[] args) {
int[] a = {34, 2, 25, 1, 12, 34, 12, 56, 23, 15, 34, 67, 89, 54, 33};
int i1 = partition1(a, 0, 14);
System.out.println(i1);
}
int[] a={34, 2, 25, 1, 12, 34, 12, 56, 23, 15, 34, 67, 89, 54, 33}
定义一个key=num[0]=34
第1轮->
//从后半部分向前扫描
array[14]=33<key;array[0]=33;lo=0,hi=14
33, 2, 25, 1, 12, 34, 12, 56, 23, 15, 34, 67, 89, 54, 33
//从前往后扫
lo=0
array[lo]=33<key;
lo++=1
array[lo]=2<key;
lo++=2
array[lo]=25<key;
lo++=3
array[lo]=1<key;
lo++=4
array[lo]=12<key;
lo++=5
array[lo]=34=key;
lo++=6
array[lo]=12<key;
lo++=7
array[lo]=56>key
array[hi]=56;
lo=7;hi=14;
array[]a={33, 2, 25, 1, 12, 34, 12, 56, 23, 15, 34, 67, 89, 54, 56}
第二轮
//从后往前
lo=7;hi=14
array[hi]=56>key
hi--=13;
arry[hi]=54>key;
hi--=12
array[hi]=89>key;
hi--=11
array[hi]=67>key;
hi--=10
array[hi]=34=key;
array[lo]=array[hi]=34
array[]a={33, 2, 25, 1, 12, 34, 12,34, 23, 15, 34, 67, 89, 54, 56}
lo=7;hi=10
array[7]=34=key;
lo++=8
array[8]=23<key;
lo++=9
array[lo]=15<key;
lo++=10
array[lo]=34=key
lo=hi
array[hi]=array[lo]=34;
array[hi] = key;
return hi;