public class FastSort {
public void mergeSort(Integer a[],int left,int right) {
if(left>right) {
return;
}
int index=findIndex(a,left,right);
mergeSort(a, left,index-1);//分解
mergeSort(a, index+1,right);//分解
}
/*1.取最后一个元素值为k,从左到右找出一个大于k的值ki,从右到左开始遍历,找出一个小于k的值kj
*2.若此时i<j,交换a[i]和a[j]的值
*3.若i>=j,那么此时j所指向的值小于k,i指向的值大于k,交换k和aj的值,并返回j的位置,也就是index的位置,index的位置就是它该在的位置
*/
public int findIndex(Integer a[], int left, int right) {
int priod = a[left];
int i = left+1, j = right;
while (true) {
/*
* 从左到右,找出一个大于priod的数
*/
for (int k = i; k <=right; k++) {
if (a[i] >= priod) {
break;
}else {
i++;
}
}
/*
* 从右到左,找出一个小于priod的数
*/
for (int k = j; k >= left; k--) {
if (a[j] <= priod) {
break;
}else {
j--;
}
}
if (i < j) {
int temp = a[i];
a[i++] = a[j];
a[j--] = temp;
} else {
int temp = a[j];
a[j] = priod;
a[left] = temp;
return j;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer a[] = {90,2,45,36,67,78,56,56,56, 10, 13, 3, 7,9, 8, 10, 15, 11};
FastSort mergesort=new FastSort();
mergesort.mergeSort(a, 0,a.length-1);
for(Integer c:a) {
System.out.print(c+" ");
}
}
}