递归实现
package sort_algorithm;
/**
* @Description 快速排序
* @auther movw
* @create 2019-02-14 13:41
* @package sort_algorithm
*/
public class QuickSort {
public static void quickSort(int[] quickSource, int low, int high) {
int start = low;
int end = high;
int key = quickSource[low];
while (end > start) {
//从后往前比较
//如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较
while (end > start && quickSource[end] >= key)
{
end--;
}
if (quickSource[end] <= key) {
int temp = quickSource[end];
quickSource[end] = quickSource[start];
quickSource[start] = temp;
}
//从前往后比较
//如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置
while (end > start && quickSource[start] <= key){
start++;
}
if (quickSource[start] >= key) {
int temp = quickSource[start];
quickSource[start] = quickSource[end];
quickSource[end] = temp;
}
//此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用
}
//递归
//左边序列。第一个索引位置到关键值索引-1
if (start > low) {
quickSort(quickSource, low, start - 1);
}
//右边序列。从关键值索引+1到最后一个
if (end < high){
quickSort(quickSource, end + 1, high);
}
}
public static void main(String[] args) {
int[] a={2,3,5,1};
QuickSort.quickSort(a,0,a.length-1);
for (int aa:a){
System.out.println(aa);
}
}
}