package com.czp.stu; import java.util.Arrays; public class Algorithm { public static void main(String[] args) { int[] arr = { 1, 89, -1, 156, 0, 96, 78,1500,23,-1569 }; quickSort(arr); System.out.println(Arrays.toString(arr)); } public static void quickSort(int[] arr) { if (arr == null) return; quickSort(arr, 0, arr.length - 1); } private static void quickSort(int[] arr, int left, int right) { if (left < right) { int keyPostion = partition(arr, left, right); quickSort(arr, left, keyPostion - 1); quickSort(arr, keyPostion + 1, right); } } /** * 取第一个为基数,先从右往左扫描,直至找到一个比基数小的数, * 记录该位置j 自左往右扫描,直到找到比基数大的数, * 记录位置i,如果此时i<j,则交换 * 最后把第一个元素和基数交换 * * @param arr * @param left * @param right * @return */ private static int partition(int[] arr, int left, int right) { int j = right; int i = left; int pivot = arr[left]; while (i < j) { while (i < j && arr[j] >= pivot) j--; while (i < j && arr[i] <= pivot) i++; if (i < j) { int tmp = arr[j]; arr[j] = arr[i]; arr[i] = tmp; i++; j--; } } arr[left] = arr[i]; arr[i] = pivot; return i; } }