首先在数组中选择一个基准点,然后分别从数组的两端扫描数组,设两个指示标志(lo指向起始位置,hi指向末尾),首先从后半部分开始,如果发现有元素比该基准点的值小,就交换lo和hi位置的值,然后从前半部分开始扫,发现有元素大于基准点的值,就交换lo和hi位置的值,如此往复循环,直到lo>=hi,然后把基准点的值放到hi这个位置。一次排序就完成了。以后采用递归的方式分别对前半部分和后半部分排序,当前半部分和后半部分均有序时该数组就自然有序了。
java实现
public class QuickSort1 {
public static void main(String[] args){
int[] arr = new int[50];
for(int i=0; i<50; i++){
Random random = new Random();
arr[i] = random.nextInt(50);
}
quickSort(arr,0,49);
for(int j=0;j<50;j++){
System.out.println(arr[j]);
}
}
public static void quickSort(int[] arr, int s, int e){
int low = s;
int high = e;
if(high<=low){
return;
}
int temp = arr[low];
while(high>low){
while(high>low && arr[high]>=temp )
high--;
if(high>low){
arr[low++] = arr[high];
}
while(high>low && arr[low]<=temp)
low++;
if(high>low)
arr[high--] = arr[low];
}
arr[low] = temp;
quickSort(arr,s,low-1);
quickSort(arr,low+1,e);
}
}