快速排序
思想:1,、在待排的元素中任取一个元素作为基准(通常选第一个元素,但最好的选择是从待排元素中随机选取一个作为基准),称为基准元素。
2、将待排序的元素进行区分,比基准元素大的元素放在他的右边,比其小的元素放在它的左边。
3、对左右两个分区重复以上步骤直到所有的元素都是有序的
public class QuickSort {
/*
* 快速排序
*/
public static void quickSort(int[] arr, int _left, int _right) {
int left = _left;
int right = _right;
int temp = 0;
//待排序的元素至少有两个的情况
if (left < right) {
//待排序的第一个元素作为基准元素
temp = arr[left];
//从左右两边交替扫描,直到left = right
while (left != right) {
while (right > left && arr[right] >= temp){
//从右往左扫描,找到第一个比基准元素小的元素
right--;
}
//找到元素后与arr[left]交换
arr[left] = arr[right];
while (left < right && arr[left] <=temp) {
//从左往右扫描,找到第一个比基准元素大的元素
left++;
}
//找到元素后与arr[right]交换
arr[right] = arr[left];
}
//基准元素归位
arr[right] = temp;
//对基准元素左边的元素进行递归排序
quickSort(arr, _left, right - 1);
//对基准元素右边的进行递归排序
quickSort(arr,left + 1, _right);
}
}
public static void main(String[] args) {
int[] array = {10,5,3,1,7,2,8};
quickSort(array, 0, array.length - 1);
System.out.println(array);
}
}