選擇排序
排序就是將一組資料按照某種特定的邏輯進行重新的排列的過程。比如將乙個資料按照由大到小的順序排列。
我們接下來將說明一種初級的排序演算法的實現,我們要從簡單的排序演算法慢慢的往下深入。在這裡我們要通過它熟悉一些簡單的技巧。
通用工具類如下:
public class sortutil
public static void exch(comparable a,int i,int j)
public static void show(comparable a)
system.out.print(a[i]+",");
} }}
sort():我們會把排序**放到類的sort()方法中。
less():對元素進行比較,通過comparable介面實現比較。
exch():將元素交換位置。
這樣做 方便我們統一**,使原有**得到最大可能的復用。compareto()必須實現乙個完整的比較序列:
這些標準都很好理解,實現起來也不難。
評判演算法效能的重要依據,計算不同排序演算法再同一組隨機資料中的基本操作次數(包括比較和交換,或者資料的讀寫次數),因此上面一致的**操作更能得出合理的結果。
我們需要計算比較和交換的次數,對於不交換元素的演算法,我們會計算訪問陣列的次數
也是衡量演算法的乙個標準,計算額外使用的空間。
思想:首先,在陣列中找到通過比較找到最小的那個元素,其次,將它和陣列中的第乙個元素交換位置。再次,在剩下的元素中找到最小的元素,將它與陣列中的第二個元素交換位置。以此類推,直到整個陣列排序完畢。這種方法就叫做選擇排序,因為它不斷的選擇剩餘元素的最小者,突出了乙個選擇,名字起的也是很貼切的。
因為每次交換都會排定乙個元素,因此交換的次數是n,所以演算法的時間效率取決於比較的次數。
**實現如下:
public class selection ;
sort(a);
sortutil.show(a); }
public static void sort(comparable a)
}sortutil.exch(a, i, min);
} }}
執行後結果為:0,1,1,2,2,3,4,6,7,8,9
可以看到原始資料已經排序好了,實現起來不複雜。
通過上述演算法實現我們可知:對於長度為n的陣列,選擇排序需要大約n2/2次比較和n次交換。由於是巢狀迴圈所以有(n-1)+(n-2)+…+2+1 = n(n-1)/2
我們可以看出選擇排序有兩個鮮明的特點:
排序演算法 選擇排序
private static int leftchild int i private static void perc int a,int i,int n for int i 0 ir j break else public static void heasp int r,int n for i 0...
排序演算法 選擇排序
摘自 wiki百科 選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小元素,然後放到排序序列末尾 目前已被排序的序列 以此類推,直到所有元素均排序完畢。c語言實現 vo...
排序演算法 選擇排序
排序演算法作為最基本也是最常用的演算法,是我們必須要掌握的內容。本文從比較基礎的選擇排序演算法開始,進行排序演算法的介紹。思想 選擇排序,顧名思義,就是從一組總數為n的無序陣列中,進行一次遍歷,選擇出最小 最大 的乙個,把它交換到陣列的第0個位置。然後不斷重複該操作,直到最後兩個數。在第 i 次選擇...