所謂的快速排序的思想就是,首先把數組的第一個數拿出來做為一個key,在前后分別設置一個i,j做為標識,然后拿這個key對這個數組從后面往前遍歷,及j--,直到找到第一個小於這個key的那個數,然后交換這兩個值,交換完成后,我們拿着這個key要從i往后遍歷了,及i++;一直循環到i=j結束,當這里結束后,我們會發現大於這個key的值都會跑到這個key的后面,不是的話就可能你寫錯了,小於這個key的就會跑到這個值的前面;然后我們對這個分段的數組再時行遞歸調用就可以完成整個數組的排序。
用圖形法表示由下:
這樣就以key分為了兩個段,我們把這兩個段再遞進去就可以解決問題了
實現代碼由下:
1 package com.quick; 2 3 public class quick { 4 public void quick_sort(int[] arrays, int lenght) { 5 if (null == arrays || lenght < 1) { 6 System.out.println("input error!"); 7 return; 8 } 9 _quick_sort(arrays, 0, lenght - 1); 10 } 11 12 public void _quick_sort(int[] arrays, int start, int end) { 13 if(start>=end){ 14 return; 15 } 16 17 int i = start; 18 int j = end; 19 int value = arrays[i]; 20 boolean flag = true; 21 while (i != j) { 22 if (flag) { 23 if (value > arrays[j]) { 24 swap(arrays, i, j); 25 flag=false; 26 27 } else { 28 j--; 29 } 30 }else{ 31 if(value<arrays[i]){ 32 swap(arrays, i, j); 33 flag=true; 34 }else{ 35 i++; 36 } 37 } 38 } 39 snp(arrays); 40 _quick_sort(arrays, start, j-1); 41 _quick_sort(arrays, i+1, end); 42 43 } 44 45 public void snp(int[] arrays) { 46 for (int i = 0; i < arrays.length; i++) { 47 System.out.print(arrays[i] + " "); 48 } 49 System.out.println(); 50 } 51 52 private void swap(int[] arrays, int i, int j) { 53 int temp; 54 temp = arrays[i]; 55 arrays[i] = arrays[j]; 56 arrays[j] = temp; 57 } 58 59 public static void main(String args[]) { 60 quick q = new quick(); 61 int[] a = { 49, 38, 65,12,45,5 }; 62 q.quick_sort(a,6); 63 } 64 65 }