快速排序的原理:
选一个数组中的第一个元素作为参照物,把所有小于参照物的元素都放在参照物的左边,将所有大于参照物的元素都放在右边。在递归的各自的子数组。
定义两个指针,分别从前遍历和从后遍历,向前遍历时,如果小于参照物,交换他们的位置,向后遍历时,如果大于参照物,交换他们的位置。直到两个指针相遇。
package calc;
public class QuickSort {
/**
* @param args
*/
public static void main(String[] args) {
int data[] = {110,305,65,57,90,120,110,8,79,44};
int min = 0;
int max = 9;
quickSort(data,min,max);
for(int temp : data)
System.err.println(temp);
}
public static void quickSort(int[] data,int min,int max){
int indexofpartition;
if(max>min){
//core
indexofpartition = findPartition(data,min,max);
quickSort(data,min,indexofpartition-1);
quickSort(data,indexofpartition+1,max);
}
}
public static int findPartition(int[] data,int min,int max){
int left,right,partitionIndex;
int temp,partitionelement;
partitionelement=data[min];
left=min;
right=max;
partitionIndex=min;
while(left<right){
while(data[right]>partitionelement&&left<right)
right--;
temp = data[right];
data[right] = data[partitionIndex];
data[partitionIndex] = temp;
partitionIndex = right;
while(data[left]<=partitionelement&&left<right)
left++;
if(left<right){
temp = data[left];
data[left] = data[partitionIndex];
data[left] = temp;
partitionIndex = left;
}
}
return partitionIndex;
}
}