package sort_book_datastruction;
import java.util.ArrayList;
import java.util.Arrays;
/**
* 快速排序:
* 基本思想:通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字比另一部分记录的关键字小,
* 则可以分别对两部分记录继续进行排序,以达到整个序列有序;
* 每一趟能够将枢轴元素放在正确的位置上。
*具体做法:附设两个指针low和high,他们的初值分别是low和high,设枢轴记录的关键字为pivotkey,
* 则首先从high所指的位置起向前搜索找到第一个关键字小于pivotkey的记录和枢轴互相交换,
* 然后从low所指的位置起向后搜索,找到第一个关键字大于pivotkey的记录和枢轴互相交换,
* 重复这两步,直至low=high为止;
*改进:每交换一对记录需进行三次记录赋值操作,而实际过程中对枢轴记录的赋值是多余的,因为只有一趟排序结束时,即
* low=high的位置才是枢轴记录的最后位置。
* @author Administrator
*
*/
public class QuikSort {
public int getMiddle(int[] array,int low ,int high){
if(array.length <=0)
return -1;
int pivotkey = array[low];
while(low<high){
while(low<high&&array[high]>=pivotkey)
high--;
array[low]=array[high];
while(low<high &&array[low]<=pivotkey)
low++;
array[high]=array[low];
}
array[low] = pivotkey;
return low;
}
public void Qsort(int[] array,int low,int high){
if(low<=high){
int pivotloc = getMiddle(array,low,high);
Qsort(array,low,pivotloc-1);
Qsort(array,pivotloc+1,high);
}
}
public static void main(String[] args) {
QuikSort qs = new QuikSort();
int[] array = {49,38,65,97,76,13,27,49};
qs.Qsort(array, 0, array.length-1);
System.out.println("QUickSort:"+Arrays.toString(array));
}
}