quicksort(java版)

來源:互聯網
上載者:User

標籤:extern   out   arrays   遞迴   定位   for   blog   地理   解釋   

相信大家都知道幾種排序演算法,比如說冒泡排序,選擇排序,插入排序等等,這些個演算法都不是很難,自己多多理解理解就能掌握了,而今天我們要談的就是重頭戲就是快速排序。

引用大牛的思想來對排序演算法解釋一下。(文章連結:http://bubkoo.com/2014/01/12/sort-algorithm/quick-sort/#參考文章)

快速排序是圖靈獎得主 C. R. A. Hoare 於 1960 年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法(Divide-and-ConquerMethod)。

分治法的基本思想是:將原問題分解為若干個規模更小但結構與原問題相似的子問題。遞迴地解這些子問題,然後將這些子問題的解組合為原問題的解。

利用分治法可將快速排序的分為三步:

  1. 在資料集之中,選擇一個元素作為”基準”(pivot)。
  2. 所有小於”基準”的元素,都移到”基準”的左邊;所有大於”基準”的元素,都移到”基準”的右邊。這個操作稱為分區 (partition) 操作,分區操作結束後,基準元素所處的位置就是最終排序後它的位置。
  3. 對”基準”左邊和右邊的兩個子集,不斷重複第一步和第二步,直到所有子集只剩下一個元素為止。

下面的簡單的介紹一下實現步驟:

上面的圖片就是基本實現思路,有點不完全,說的是在快排中基準元素的尋找以及定位,基準元素要將比基準元素大的和比基準元素小的要分開,然後一直遞迴下去,就能實現快排了,本例中基準元素是給定的,而是自己實現的過程中,每次會把第一個元素當成基準元素進行排序。

話不多說,上代碼。

 1 public static int getMiddle(int[] a, int low, int high){ 2         //比基準元素小的元素的索引 3         int storeIndex = 0; 4         //預設取第一個元素為基準元素 5         int pivot = a[low]; 6         //先將基準元素移動到數組最後 7         int tmp = a[low]; 8         a[low] = a[a.length - 1]; 9         a[a.length - 1] =tmp;10         //將比基準元素小的放到前面,後面跟上比基準元素大的11         for(int i = 0; i < a.length - 1; i++) {12             if(a[i] <= pivot){13                 int temp = a[i];14                 a[i] = a[storeIndex];15                 a[storeIndex] = temp;16                 storeIndex++;17             }            18         }19         //將基準元素放回經過篩選元素後的中間位置20         int temp = a[storeIndex];21         a[storeIndex] = a[a.length - 1];22         a[a.length - 1] = temp;23         //System.out.println(Arrays.toString(a));24         return storeIndex;25     }26     27     public static void quickSort(int[] a, int low, int high) {28         if(low < high) {            29             int middleIndex = getMiddle(a, low, high);30             System.out.println(Arrays.toString(a));31             //分成兩組分別快排,遞迴的思想後面的分組就多了32             quickSort(a, low, middleIndex - 1);33             quickSort(a, middleIndex + 1, high);34         }35     }

這兩個函數就是實現排序,第一個函數是對基準位置的定位,第二是根據基準位置分為兩組分別遞迴,代碼中都包含注釋,可以根據其更好地理解代碼。

如果有何不妥,可以在評論區裡交流哦。

quicksort(java版)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.