選擇排序的基本方法:
每次都從待排序物件中選出排序碼最大或最小的物件,依次排列,一共進行n-1次即可將n個物件排序完成。
選擇排序的實施方案:
1. 直接選擇排序
2. 堆排序
一、直接選擇排序
1. 演算法**:
/*** 直接選擇排序
**/func selectsort(data int)
} if minindex != i }}
2. 時間複雜度:o(n*n)
缺陷:每次都要從n-i+1個記錄中選乙個排序碼最小的物件,從而需要進行n-i次比較,當n很大時,其效率很低。
3. 穩定性:不穩定
二、堆排序
關於堆的介紹與實現可以先檢視我的另一篇博文:
1. 演算法描述:
使用最小堆或最大堆來選出待排序物件的最小或最大排序碼物件。
2. 演算法**:
可以使用最小堆或者最大堆實現,其中使用最大堆演算法的空間複雜度更優,因為只需在原來陣列上對資料位置進行調整即可,而使用最小堆排序的話還需要使用乙個額外的陣列來儲存排序結果。所以這裡只給出使用最大堆的演算法。
/*** 堆排序(使用最大堆)
**/func heapsort(data int)
for count > 1
}/**
* 向下調整最大堆
**/func shiftdown(data int, start, end int)
if data[j] > temp else
} data[i] = temp
}
3. 時間複雜度:o(nlogn)
直接選擇排序進行了很多重複的比較,而堆則相當於儲存了比較結果,避免太多重複比較,所以比較次數較少,但是由於建立初始堆所需的比較次數較多,所以堆排序對記錄數較少的序列並不值得提倡,但對於數目較大的序列來說還是很有效的。
4. 空間複雜度:o(1)
5. 穩定性:不穩定
選擇排序 直接選擇排序,堆排序
選擇排序 selection sort 是一種簡單直觀的 排序演算法 它的工作原理是每一次從待排序的 資料元素 中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。選擇排序是不穩定的排序方法 1.簡單的選擇排序 基本思想 在要排序的一組數中,選出最小的乙個數與第乙個位...
選擇排序 直接選擇排序 堆排序
1.基本思想 每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完 在元素集合array i array n 1 中選擇關鍵碼最大 小 的資料元素 若它不是這組元素中的最後乙個 第乙個 元素,則將它與這組元素中的最後乙個 第乙個 元素交換 在剩餘...
選擇排序(直接選擇 堆排序)
直接選擇排序 不穩定 排序過程 1 首先在所有資料中經過n 1次比較選出最小的數,把它與第1個資料交換,2 然後在其餘的資料內選出排序碼最小的數,與第2個資料交換.依次類推,直到所有資料排完為止。在第i 趟排序中選出最小關鍵字的資料,需要做n i次比較。複雜度 總的比較次數為 n n 1 2 o n...