Java-快速排序

來源:互聯網
上載者:User

標籤:

一、快速排序的原理

使用分治演算法進行快速排序,以最後一個元素為標識,然後從頭開始遍曆,把比這個標識小的元素全部放在左邊,把比這個標識大的元素全部放在右邊,最後就用這個標識將數組分成了兩個部分,然後再分別對標識的前後部分的數組繼續進行排序,如此下去就能得到排好序的數組。

二、快速排序的虛擬碼實現

 1 QUICKSORT(A, p, r)   2  if p < r   3     then q ← PARTITION(A, p, r)   4          QUICKSORT(A, p, q - 1)   5          QUICKSORT(A, q + 1, r)   6 PARTITION(A, p, r)   7   x ← A[r]   8   i ← p - 1   9   for j ← p to r - 1  10        do if A[j] ≤ x  11              then i ← i + 1  12              exchange A[i] ←→ A[j]  13   exchange A[i + 1] ←→ A[r]  14   return i + 1  

 

三、快速排序的Java代碼實現

 1 import java.util.Comparator; 2  3  4 public class QuickSort { 5      6     public static <T> void quickSort(T[] t, int p, int r, Comparator<? super T> c){ 7         if(p < r-1){ 8             int q = partition(t, p, r, c); 9             quickSort(t, p, q, c);10             quickSort(t, q+1, r, c);11             12         }13     }14     public static <T> int partition(T[] t, int p, int r, Comparator<? super T> c){15         T x = t[r-1];16         int i = p-1;17         for(int j = p; j < r-1; j ++){18             if(c.compare(t[j], x) < 0){19                 i = i + 1;20                 T temp = t[i];21                 t[i] = t[j];22                 t[j] = temp;23             }24         }25         T temp = t[i+1];26         t[i+1] = t[r-1];27         t[r-1] = temp;28         return i + 1;        29     }30     31     public static <T> void quickSort(T[] t, Comparator<? super T> c){32         quickSort(t, 0, t.length, c);33     }34     35     public static void main(String[] args){36         //在這裡進行代碼測試37         Integer[] ints = new Integer[]{2, 0, 5, 23, 1, 4, 8, 56, 19};38         quickSort(ints, new Comparator<Integer>(){39             public int compare(Integer o1, Integer o2){40                 return o1-o2;41             }42         }); 43         44         for(int i = 0; i < ints.length; i ++){45             System.out.print(ints[i] + " ");46         }47     }48 }

運行結果:

0 1 2 4 5 8 19 23 56 

 

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.