package ds.sort;
import java.util.Arrays;
import java.util.Scanner;
/**
* 快速排序采用的是分治法思想,选择第一个数为key
* 第一轮将比key小的放在左边,大的都放在右边
* 然后分别再对左右两边的子数组进行类似操作
* @author zz
*
*/
public class QuickSort {
public static void quicksort(int[] a, int left, int right) {
if (left < right) {
int key = a[left];
int low = left;
int high = right;
// boolean flag = false;
while (low < high) {
while (low < high && a[high] >= key) {
high--;
}
// if(low != high) flag = true;
a[low] = a[high];
while (low < high && a[low] <= key) {
low++;
}
a[high] = a[low];
}
a[low] = key;
quicksort(a, left, low - 1);
quicksort(a, low + 1, right);
}
System.out.println(Arrays.toString(a));
}
public static void quickSort(int[] a, int left, int right) {
if(left < right) {
int key = a[left];
int low = left;
int high = right;
while(low < high) {
while(low < high && a[high] >=key) high--;
a[low] = a[high];
while(low < high && a[low] <= key) low++;
a[high] = a[low];
}
a[low] = key;
quickSort(a, left, low-1);
quickSort(a, low+1, right);
}
System.out.println(Arrays.toString(a));
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入数组元素的个数n: ");
int n = input.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = input.nextInt();
}
quickSort(a, 0, n-1);
}
}