在java下Array.Sort和(自己寫的)快速排序到底那個快?

來源:互聯網
上載者:User

      近期做java實習題時,無意間用到了快速排序,當時因為忘記了,上網搜了一下......可搜的搜的我思考一個問題:在java下Array.Sort和(自己寫的)快速排序到底那個快?

      網上有很多博主討論過這個問題,他們做出的結論都是System.Array.Sort比自己寫的排序演算法要快很多,例如:http://www.cnblogs.com/Mainz/archive/2008/04/22/1165429.html的答案就是這樣的!自己懷著好奇的心態在java下做了一下,可結果......

微軟MSDN上對System.Array.Sort的說明: 

     “Array 中的每個元素均必須實現 IComparable 介面,才能與 array 中的其他所有元素進行比較。如果排序不能成功地完成,則結果未定義。此方法使用 QuickSort 演算法。此實現執行不穩定排序;亦即,如果兩元素相等,則其順序可能不被保留。相反,穩定排序保留相等元素的順序。 一般情況下,此方法的運算複雜度為 O(n log n),其中 n 是 array 的 Length;最壞的情況下其運算複雜度為 O(n ^ 2)。”

 

java程式比較:

 1 import java.util.Arrays; 2 import java.util.Random; 3 import java.util.Scanner; 4  5 public class QuickSort { 6     public static void Quicksort(int[] a,int Left,int Right){ 7         int left,right,temp,middle; 8         middle=a[(Left+Right)/2]; 9         left=Left;10         right=Right;11         do{12             //從左邊尋找大於中間值的下標13             while(left<Right&&a[left]<middle){14                 left++;15             }16             //從右邊尋找小於中間值的下標17             while(right>Left&&a[right]>middle){18                 right--;19             }20             //找到一對,對換他們21             //注意:如果少了等號,會長生死迴圈22             if(left<=right){23                 temp=a[left];24                 a[left]=a[right];25                 a[right]=temp;26                 left++;27                 right--;28             }29             30         }while(right>=left); //直到左右對換31         32         if(Left<right){33             Quicksort(a,Left,right);34         }35         36         if(Right>left){37             Quicksort(a,left,Right);38         }39     }40     41     public static void main(String[] args) {42         // TODO Auto-generated method stub43         Scanner myscnner=new Scanner(System.in);44         System.out.println("請輸入排序數組大小:");45    46         int n=myscnner.nextInt();47         int[] a=new int[n];48         49         Random random=new Random();50         for (int i = 0; i < a.length; i++) {51             a[i]=Math.abs(random.nextInt())%10000000;52         }53         54         //System.Array.Sort執行時間以及執行結果55         System.out.println("System.Array.Sort執行時間以及執行結果:");56         long t=System.nanoTime();57         Arrays.sort(a,0,a.length);58         for (int i = 0; i < a.length; i++) {59             System.out.print(a[i]+" ");60         }61         System.out.println();62         System.out.println(System.nanoTime()-t);63         64         //My QuickSort執行時間以及執行結果65         System.out.println("My QuickSort執行時間以及執行結果:");66         long t2=System.nanoTime();67         Quicksort(a,0,n-1);68         for (int i = 0; i < a.length; i++) {69             System.out.print(a[i]+" ");70         }71         System.out.println();72         System.out.println(System.nanoTime()-t2);73     }74 75 }

 

運行結果:

 當數組很小時:

逐漸增大:

 

自己很驚奇,難道java下這個問題的答案是:Array.Sort小於(自己寫的)快速排序。

不知道自己得出的結論是否正確,我多次實驗過,得出的結果都是一樣的!

希望看到此篇的牛人們看有沒有問題???郵箱聯絡(18700943025@163.com)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.