一種用Java實現的直接選擇排序算法
大家都學習過數據結構,都知道各種各樣的排序方法,比如冒泡排序,選擇排序,堆排序,歸并排序等等,我學習的教材是C語言版的,今天處于好奇,寫了一個用Java語言實現的直接選擇排序的程序,與大家分享一下。
直接選擇排序的思想是;
n個記錄的文件的直接選擇排序可經過n-1趟直接選擇排序得到有序結果:
①初始狀態:無序區為R[1..n],有序區為空。
②第1趟排序
在無序區R[1..n]中選出關鍵字最小的記錄R[k],將它與無序區的第1個記錄R[1]交換,使R[1..1]和R[2..n]分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。
……
③第i趟排序
第i趟排序開始時,當前有序區和無序區分別為R[1..i-1]和R[i..n](1≤i≤n-1)。該趟排序從當前無序區中選出關鍵字最小的記錄R[k],將它與無序區的第1個記錄R[i]交換,使R[1..i]和R[i+1..n]分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。
這樣,n個記錄的文件的直接選擇排序可經過n-1趟直接選擇排序得到有序結果。
用Java實現的代碼如下:











































































3.6,7.4,2.1,3.3,2.0
排序后:
2.0,2.1,3.3,3.6,7.4
(1)關鍵字比較次數
無論文件初始狀態如何,在第i趟排序中選出最小關鍵字的記錄,需做n-i次比較,因此,總的比較次數為:
n(n-1)/2=0(n2)
(2)記錄的移動次數
當初始文件為正序時,移動次數為0
文件初態為反序時,每趟排序均要執行交換操作,總的移動次數取最大值3(n-1)。
直接選擇排序的平均時間復雜度為O(n2)。
(3)直接選擇排序是一個就地排序
(4)穩定性分析
直接選擇排序是不穩定的
【例】反例[2,2,1]
posted on 2007-04-16 11:51 我為J狂 閱讀(4074) 評論(8) 編輯 收藏 所屬分類: Java算法