快速排序之java實現
阿新 • • 發佈:2017-12-01
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 }
說說幾個我覺得註意的問題:
- sort()的形參start,end要賦值給i,j.因為我們要通過下標交換數組中的元素。而且最後還要用到start,end。所以不能直接用start,end操作。
- 思想無非就是以start為key從右往左遍歷,只要出現了小於key的元素,即交換;而後從左往右遍歷,大於key的元素交換
- 註意交換的過程中,要想明白,key是在不停的變換位置。
- 最後i,j應該相等,跳出最外層while循環
- 而後遞歸調用sort
快速排序之java實現