快速排序 平均时间复杂度 O(NlogN) 最差时间复杂度O(N*N) 不稳定
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
/** * 1.先从数列中取出一个数作为基准数。 * 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 * 3.再对左右区间重复第二步,直到各区间只有一个数。 * 时间复杂度为O(nlog n) * 不稳定排序方式 */
public class quickSort {public static int[] sort(int[] data, int left, int right){if (left < right) {int mid = partition(data, left, right);sort(data, left, mid - 1); //左边sort(data, mid + 1, right); //右边}return data;///返回}public static int partition(int[] data, int left, int right) {int x = data[left];//基准数 int i = left;int j = right;if (left < right) {while (i < j) {while ((i<j) && (data[j] >= x)) {j--;}if (i < j){data[i++] = data[j];}while ((i<j) && (data[i] < x)) { //从左边第一个小于x的数i++;}if (i < j) {data[j--] = data[i];}}data[i] = x;}return i;}public static void main(String[] args) { int[] data = {4, 7, -4, 13, 6, 6, 18, 10, 85, 94}; quickSort.sort(data, 0, data.length - 1);}
}