快速排序Java实现
快速排序是一种分治的排序算法,将一个数组分成两个数组,将两部分独立地排序。一般策略是先取基准元素,又称切分元素,从数组右边开始向左扫描直到找到一个不大于它的元素填入到右边的坑内,然后从左向右扫描,找到一个不小于它的元素填入到左边的坑内。
public class QuickSort {
public static void quickSort(int[] data, int left, int right){
if(left < right){
int i = left, j = right, tmp = data[left];
while (i < j){
while(i < j && data[j] > tmp) //从右往左找不大于tmp的数据
j--;
if(i < j)
data[i++] = data[j]; //将不大于tmp的数据填入到左边的坑内
while(i < j && data[i] < tmp) //从左往右找不小于tmp的数据
i++;
if(i < j)
data[j--] = data[i]; //将不小于tmp的数据填入到右边的坑内
}
data[i] = tmp; //将基准数据放入到剩余的坑内
quickSort(data, left,i-1); //采用分治法的思想先左边再右边
quickSort(data, i+1, right);
}
}
public static void main(String[] args) {
int[] a = {49, 38, 65, 97, 76, 13, 27, 50};
quickSort(a,0, a.length -1);
for(int b : a)
System.out.print(b + " ");
}
}