當前位置:成語大全網 - 書法字典 - java中幾種排序方法的優缺點是什麽?

java中幾種排序方法的優缺點是什麽?

首先,冒泡排序

壹組無序數據a【1】,a【2】,...已知a【n】,需要按升序排列。首先,比較a【1】和a【2】的值。如果a【1】大於a【2】,則交換兩者的值,否則將保持不變。然後比較a【2】和a【3】的值。如果a【2】大於a【3】,則交換兩者的值,否則將保持不變。然後比較a【3】和a【4】,以此類推,最後比較a【n-1】和a【n】的值。經過壹輪這樣的處理後,a【n】的值必須是這組數據中最大的。如果a【1】~ a【n-1】在另壹輪中以相同的方式處理,則a【n-1】的值必須是a【1】~ a【n-1】中最大的。然後a【1】~ a【n-2】以同樣的方式處理壹輪,以此類推。* * *處理後n-1,壹個【1】,壹個【2】,...a【n】按升序排列。

優點:穩定;

缺點:速度慢,壹次只能移動兩個相鄰的數據。

第二,選擇排序

冒泡排序的改進版本。

每次行程從要排序的數據元素中選擇最小(或最大)的元素,並將順序放在排序後的數據序列的末尾,直到所有要排序的數據元素都排列好。

選擇性排序是壹種不穩定的排序方法。

n個記錄文件的直接選擇排序可以通過n-1直接選擇排序得到壹個有序的結果:

①初始狀態:無序區域為r【1...n】,並且訂購區域為空。

②1遍上的排序

選擇無序區域R【1中關鍵字最小的記錄R【k】...n】並將其與無序區域中的1記錄R【1】交換,這樣R【1...1】和r【2...n】分別成為記錄的數量。

……

③第壹排序

在第I次排序開始時,當前有序區域和無序區域為R【1..i-1】和R(1≤I≤n-1)。這個排序從當前無序區域中選擇關鍵字最小的記錄R【k】,並將其與無序區域中的第1條記錄R交換,這樣R【1...I】和R分別成為增加1條記錄的新有序區域和減少1條記錄的新無序區域。

這樣,n個記錄文件的直接選擇排序可以在n-1直接選擇排序後得到壹個有序的結果。

優點:移動數據的次數是已知的(n-1次);

缺點:比較太多。

第三,插入排序

壹組數據a【1】,a【2】,...按升序排列的a【n】和壹組無序數據b【1】,b【2】,...b【m】是已知的,因此有必要將它們組合成壹個升序序列。首先,比較b【1】和a【1】的值。如果b【1】大於a【1】,則跳過並比較b【1】和a【2】的值。如果以同樣的方式插入B【1】B【2】~ B【m】。(如果A有無數組,b【1】可以看作n=1的數組A。)

優點:穩定快速;

缺點:比較的次數不壹定相同。比較次數越少,插入點後移動的數據就越多,尤其是當數據總量巨大時,但鏈表可以解決這個問題。

第三,縮小增量排序的範圍

它是希爾在1959中提出的,也稱為希爾排序(殼排序)。

壹組無序數據a【1】,a【2】,...已知a【n】,需要按升序排列。發現當n不大時,插入排序的效果很好。首先,取增量d(d

優點:速度快,數據移動少;

缺點:不穩定,d的值是多少,應該取多少個不同的值,妳無法確切知道,只能憑經驗取。

第四,快速分類

快速排序是目前已知的最快的排序方法。

壹組無序數據a【1】,a【2】,...已知a【n】,需要按升序排列。首先,將數據a【x】作為基準。將A【x】與其他數據進行比較並排序,使A【x】排在數據的第k個位置,A【1】~ A【k-1】中的每個數據為:A【x】,然後使用分治策略對A【1】~ A【k-1】和A【k+1】~ A【n】的數據進行快速排序。

優點:速度極快,數據移動較少;

缺點:不穩定。

五、箱子分類

壹組無序的正整數數據a【1】,a【2】,...已知a【n】,需要按升序排列。首先定義壹個數組x【m】,m》;= a【1】,a【2】,...a【n】,然後循環n次,每次x【a】++。

優點:速度快,效率達到O(1)。

缺點:數據範圍必須是正整數且相對較小。

第六,合並和排序

合並排序是將兩個或多個有序表多次合並成壹個新的有序表。最簡單的合並是將兩個有序子表直接合並成壹個有序表。

合並排序是壹種穩定排序,即相等元素的順序不會改變。例如,當輸入記錄1(1)3(2)2(3)2(4)5(5)時,輸出為1(1)2(3)2。中的2和2按輸入順序排列。當要排序的數據包含多個信息且其中壹個需要排序時,這壹點非常重要,其他信息應盡可能按輸入順序排列。這也是它相對於快速排序的優勢。