原理:
快速排序是一种高效的排序算法,其基本思想是通过一趟排序将待排序列分割成独立的两部分,其中一部分的所有元素都比另一部分的所有元素小,然后再分别对这两部分进行排序,最终得到一个有序序列。
其具体实现如下:
1.选取一个基准元素,通常选择第一个元素为基准;
2.从序列的右端开始向左扫描,找到第一个小于基准元素的元素,并将其交换到基准元素的位置上;
3.从序列的左端开始向右扫描,找到第一个大于基准元素的元素,并将其交换到步骤2中被交换的元素的位置上;
4.重复步骤2和3,直到左右指针相遇;
5.将左右指针相遇的位置的元素与基准元素交换;
6.对基准元素左边的子序列和右边的子序列分别递归地进行步骤1~5,直到整个序列有序。
图片:
代码实现
// An highlighted block
var foo = 'bar';
public static void main(String[] args) {
int[] array = {6,2,3,4,7,-1,-232,0};
sort(array,0,array.length-1);
System.out.println(Arrays.toString(array));
}
public static void sort(int[] array ,int low,int high){
//递归的边界条件
if (low>=high){
return;
}
//i,j
int i = low;
int j = high;
//key
int key = array[i];
while (i<j) {
// 3 3 4 5 8 如果不加 i<j 容易造成数组越界
while (array[j] >= key &&j>i) {
j--;
}
int t;
t = array[j];
array[j] = array[i];
array[i] = t;
// 1 3 4 5 8 如果不加 i<j 容易造成数组越界
while (array[i] <= key &&i<j) {
i++;
}
t = array[i];
array[i] = array[j];
array[j] = t;
}
//对基准左侧的集合进行重复操作
sort(array,low,i-1);
//对基准右侧的集合进行重复操作
sort(array,i+1,high);
}