快速排序算法是一種較為高效的排序算法,采用了“挖坑填數+分而治之”的思想。該算法的時間復雜度最好時為O(nlogn),最差時為O(n^2),空間復雜度為O(logn),也是不穩定的,適合n值較大的排序任務。
該算法的基本思想是:每次排序都找一個基准位,使得基准位前端的部分每個數都小於該基准位上的數,基准位后端的部分每個數都大於該基准位上的數,然后遞歸該過程,知道待排序序列中的所有元素都有序為止。
快速排序算法的一種實現如下(Java版):
1 /** 2 * 快速排序(挖坑填數+分治法) 3 * @author JiaJoa 4 * 通過查找一個待排序的序列中的一個基准位置(一般以第一個數為基准), 5 * 使得基准左邊的都小於這個基准,基准右邊的都大於這個基, 6 * 然后使用遞歸等方法對左右兩邊執行同樣的快速排序 7 * 8 */ 9 public class Algorithm_QuickSort { 10 public static void main(String[] args){ 11 int[] data = new int[]{7,1,6,4,3,2,1,23}; 12 13 Algorithm_QuickSort.quickSort(data); 14 } 15 16 //第一步,查找一個基准位 17 public static int getPart(int low,int high,int[] data){ 18 19 int comData = data[low]; //設定一個初始基准 20 while(low<high){ 21 while(low<high&&data[high]>=comData){//從右向左查找 22 high--; 23 } 24 if(low<high){ 25 data[low] = data[high]; //小於基准的移到低端 26 } 27 28 while(low<high&&data[low]<=comData){ //從左向右查找 29 low++; 30 } 31 if(low<high){ 32 data[high]=data[low]; //大於基准的移到高端 33 } 34 } 35 data[low] = comData; //基准位置不再變化時 36 return low; 37 } 38 39 //第二步,采用遞歸的方式處理基准左右兩堆 40 public static void quick_Recursion(int low,int high,int[]data){ 41 42 int base; 43 if(low<high){ 44 base = getPart(low,high,data);//獲取基准 45 quick_Recursion(low,base-1,data);//對低基准位段進行遞歸排序 46 quick_Recursion(base+1,high,data);//對高基准位段進行遞歸排序 47 } 48 } 49 50 //第三步,打印排序的序列 51 public static void quickSort(int[] data){ 52 quick_Recursion(0,data.length-1,data); 53 54 StringBuilder playnum = new StringBuilder(); 55 for(int i : data){ 56 playnum.append(i+","); 57 } 58 System.out.println(playnum.toString()); 59 } 60 }