package Sort;
import java.util.Arrays;
// 快速排序思想, 选第一个数(或其他数),比他小的放左边, 比他大的放右边
// 挖坑, 前面有坑,从后面遍历,比他基准值小的就填坑进去;后面有坑,从前面遍历, 比基准值大的就填进去
// 遍历完一轮后, 比基准值小的都在左边,比基准值大的都在右边,再分成两份再重复操作,直到只有一个元素(左索引大于等于右索引)就返回
public class QuickSort
{
public static void main(String[] args)
{
int[] arr = {5, 4, 3, 2, 1};
quick_sort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
static void quick_sort(int s[], int l, int r)
{
if (l < r)
{
//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); // 递归调用
quick_sort(s, i + 1, r);
}
}
}