排序演算法前言及選擇排序

2021-09-25 08:21:04 字數 1315 閱讀 6195

選擇排序

排序就是將一組資料按照某種特定的邏輯進行重新的排列的過程。比如將乙個資料按照由大到小的順序排列。

我們接下來將說明一種初級的排序演算法的實現,我們要從簡單的排序演算法慢慢的往下深入。在這裡我們要通過它熟悉一些簡單的技巧。

通用工具類如下:

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 次選擇...