2、快速排序
(1)基本思想
对于输入的子数组a[p:r],按以下三个步骤进行排序。
a.分解(Divide) :以a[p]为基准元素将a[p:r]划分成3段a[p:q-1] , a[q] , a[q+1: r],使a[p:q-1] 的任何一个元素小于等于a[q], 而a[q+1:r] 的任何一个元素都大于等于a[q]。下标q在划分过程中确定
b. 递归求解:通过递归调用快速排序算法分别对a[p:q-1]和a[q+1:r]进行排序
c.合并:由于对a[p : q-1] 和 a[q+1 : r] 的排序似乎就地进行的,所以在a[p:q-1]和a[q+1:r] 都已排好序后,不需要进行任何计算,a[p:r] 就已排好序。
(2)时间复杂度
最坏:T(n) = O(n^2)
平均:T(n) = O(nlogn)
(3)代码
import java.util.Arrays;
import java.util.Scanner;
public class QuickSort {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("please input the size of array:");
int size = input.nextInt();
System.out.println("please input the arrays:");