選擇排序(直接選擇排序 堆排序)

2022-03-23 08:38:43 字數 1052 閱讀 1769

選擇排序的基本方法:

每次都從待排序物件中選出排序碼最大或最小的物件,依次排列,一共進行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...