快速排序 JAVA实现

快速排序

每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。
快速排序是不稳定的,时间复杂度(平均):nlogn

public class QuickSort {
public static void Sort(int[] arr, int low, int high) { int i, j, temp; if (low > high) { return; } i = low;//一定要注意是从low开始的 j = high; // temp就是基准位 temp = arr[low]; while (i < j) { //从右向左,找到小于基准位的数组成员位置 while (temp <= arr[j] && i < j) { j--; } //从左向右,找到大于基准位的数组成员位置 while (temp >= arr[i] && i < j) { i++; } //如果满足条件则交换arr[i],arr[j] if (i < j) { swap(arr, i, j); } } //最后将基准为与i和j相等位置的数字交换(此时i j相等) arr[low] = arr[i]; arr[i] = temp; //分而治之 Sort(arr, low, i - 1); Sort(arr, i + 1, high); } public static void swap(int[] a, int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } public static void main(String[] args) { int[] arr = { 4, 5, 9, 4, 7, 23, 3, 4, 2, 1, 8, 11, 19, 10 }; Sort(arr, 0, arr.length - 1); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }

 

posted @ 2019-03-29 21:46  yanhowever  阅读(194)  评论(0编辑  收藏  举报