/** * 快速排序 * 传过来一个数组和需要排序的起始下标和终止下标 * 以数组的起始下标的值做为基准点 * 从右边起,进行判断,都是大于基准值的,当存在一个小于基准数的,记录下标 * 从左边起,进行判断,都是小于基准值的,当存在一个大于基准数的,记录下标 * * 将以上的两个值进行对调 * 将对调后左边的值与第一个值进行对调 * 这样对于左边的数据,都是小于该值的,对于右边的数据,都是大于该值的, * 将该数值分为两段,进行递归操作,往返进行,得到排序后的值 * * @param arr * @param low * @param high */ public static void quickSort(int[] arr, int low, int high) { if (low > high) { return; } int i, j, temp; i = low; j = high; temp = arr[low]; //2,4,7,-33,3,-2,78 while (i < j) { while (i < j && arr[j] >= temp) { j--; } while (i < j && arr[i] <= temp) { i++; } if (i < j) { //交换i和j的值 int t = arr[i]; arr[i] = arr[j]; arr[j] = t; } } //交换比较的值,即第一个得值,与i进行交换 arr[low] = arr[i]; arr[i] = temp; quickSort(arr, low, i - 1); quickSort(arr, i + 1, high); } 算法分析 时间复杂度: 最好:O(n log2 n)最坏:O(n^2)平均:O(n log2 n) 空间复杂度:O(n log2 n) 稳定性:不稳定