1. 程式人生 > >快速排序之java實現

快速排序之java實現

star sta arrays -- 發現 作者 沒有 span array

據說一般的筆試或面試都會考考排序,今天就試著想自己實現一把,看了原理後,發現沒那麽容易,又去網上找了下,發現評論都說作者的代碼有問題。這更激起了我的興趣。

遂堅持編寫出來並進行了測試,應該沒有問題,如有問題 希望留言評論

快速排序的理論和算法的評價就不粘貼了,網上一查一大堆,在這只寫代碼

 1 public class QuickSort {
 2     @Test
 3     public void sort(){
 4         int[] a = { 5, 8, 6, 2, 7, 9, 1, 7, 3 };
 5         //int[] a = {3, 1, 2, 5, 7, 9, 6, 4, 8};
6 7 sort(a, 0, a.length-1); 8 System.out.println(Arrays.toString(a)); 9 } 10 11 private void sort(int[] a, int start, int end) { 12 int i=start; 13 int j=end; 14 int key = a[i]; 15 int tmp; 16 while (j > i) {//向左遍歷 17 while
(j > i && a[j] >=key) 18 j--; 19 if (a[j] < key) { 20 tmp = a[j]; //key存在了a[j]中 21 a[j] = a[i]; 22 a[i] = tmp; 23 } 24 while (j > i && a[i] <= key) 25 i++;
26 if (a[i] > key) { 27 tmp = a[i]; 28 a[i] = a[j]; 29 a[j] = tmp; 30 } 31 } 32 if(j<end)sort(a,j+1,end); 33 if(i>start)sort(a,start,i-1); 34 } 35 36 }

說說幾個我覺得註意的問題:

  1. sort()的形參start,end要賦值給i,j.因為我們要通過下標交換數組中的元素。而且最後還要用到start,end。所以不能直接用start,end操作。
  2. 思想無非就是以start為key從右往左遍歷,只要出現了小於key的元素,即交換;而後從左往右遍歷,大於key的元素交換
  3. 註意交換的過程中,要想明白,key是在不停的變換位置。
  4. 最後i,j應該相等,跳出最外層while循環
  5. 而後遞歸調用sort
我遇到的坑,本來自己打算試一下123456789的,結果數組中打了兩個7,出現了死循環,後來發現23行沒有寫成>=(30行沒有寫成<=).希望初學的讀者能想明白為什麽要加等號~

快速排序之java實現