首页 > 代码库 > 快速排序

快速排序

规则快速排序是找出一个元素(理论上可以随便找一个)作为基准,然后对数组进行分区操作,使基准左边元素的值都小于基准值,基准右边的元素值都大于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正确位置,排序完成。 

时间复杂度: T(n)=O(nlogn).

稳定性: 不稳定。

 1 import java.util.Arrays;
 2 
 3 
 4 public class QuickSort {
 5 
 6     /**
 7      * 
 8      * @param args
 9      * @author wangpan
10      */
11     public static void main(String[] args) {
12         int[] a={24,12,65,34,100,11,23,76,34};
13         System.out.println("排序前:"+Arrays.toString(a));
14         sort(a, 0, a.length-1);
15         System.out.println("排序后:"+Arrays.toString(a));
16     }
17     
18     /**
19      * 调用该方法将待排序数组分成两部分,左边一部分数据比右边一部分数据小
20      * @param a   待排序的数组
21      * @param right  数组的右边界
22      * @param left 数组的左边界
23      * @author wangpan
24      */
25     public static int partition(int[] a,int low,int high){
26         int right=high;  //right存储数组上边界
27         int left=low;  //left存储数组下边界
28         int temp=a[low];    //temp存储数组第一个值
29         while(right>left){
30             while(a[right]>=temp&&left<right){   //从右边开始找到第一个小于temp的值
31                     right--;
32             }
33             a[left]=a[right];                  
34             while(a[left]<=temp&&left<right){    //从左边开始找到第一个大于temp的值
35                     left++;
36             }
37             a[right]=a[left];
38         }
39         a[left]=temp;                //将基准值填充到分界点
40         return left;
41     }
42     
43     /**
44      * 递归调用sort方法将数组排序
45      * @param a
46      * @param low
47      * @param high
48      * @author wangpan
49      */
50     public static void sort(int[] a,int low,int high){
51         if(low<high){
52             int mid=partition(a, low, high);    //将数组分成两个部分,mid为分界点
53             sort(a, low, mid-1);                //递归调用对前半部分排序
54             sort(a, mid+1, high);               //递归调用对后半部分排序
55         }
56     }
57 

58 } 

快速排序