選擇排序 直接選擇排序 堆排序

2021-09-03 03:08:49 字數 1685 閱讀 5288

1. 基本思想

每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完 。

在元素集合array[i]–array[n-1]中選擇關鍵碼最大(小)的資料元素

若它不是這組元素中的最後乙個(第乙個)元素,則將它與這組元素中的最後乙個(第乙個)元素交換

在剩餘的array[i]–array[n-2](array[i+1]–array[n-1])集合中,重複上述步驟,直到集合剩餘1個元素

2. 直接選擇排序的特性總結:

直接選擇排序思考非常好理解,但是效率不是很好。實際中很少使用

時間複雜度:o(n^2)

空間複雜度:o(1)

穩定性:不穩定

3. **實現

//直接選擇排序公升序

void

selectsort

(int

* array,

int size)

if(minpos != i)

swap

(array[minpos]

, array[i]);

}}

4. 直接選擇排序優化

從兩頭同時選取最大和最小元素,分別放在陣列的頭和尾

//直接選擇排序優化

void

selectsortop

(int

* array,

int size)

if(minpos != begin)

swap

(array[minpos]

, array[begin]);

if(maxpos == begin)

maxpos = minpos;

if(maxpos != end)

swap

(array[maxpos]

, array[end]);

end--

; begin++;}

}

1. 基本思想

堆排序(heapsort)是指利用堆積樹(堆)這種資料結構所設計的一種排序演算法,它是選擇排序的一種。它是通過堆來進行選擇資料。需要注意的是排公升序要建大堆,排降序建小堆。

2. 堆排序的特性總結:

堆排序使用堆來選數,效率就高了很多。

時間複雜度:o(n*logn)

空間複雜度:o(1)

穩定性:不穩定

3. **實現

//向下調整

void

heapadjust

(int

* array,

int parent,

int size)

else}}

//堆排序降序

void

heapsort

(int

* array,

int size)

//2. 堆刪除的思想

int end = size -1;

while

(end >0)

}

選擇排序 直接選擇排序,堆排序

選擇排序 selection sort 是一種簡單直觀的 排序演算法 它的工作原理是每一次從待排序的 資料元素 中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。選擇排序是不穩定的排序方法 1.簡單的選擇排序 基本思想 在要排序的一組數中,選出最小的乙個數與第乙個位...

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

選擇排序的基本方法 每次都從待排序物件中選出排序碼最大或最小的物件,依次排列,一共進行n 1次即可將n個物件排序完成。選擇排序的實施方案 1.直接選擇排序 2.堆排序 一 直接選擇排序 1.演算法 直接選擇排序 func selectsort data int if minindex i 2.時間複...

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

直接選擇排序 不穩定 排序過程 1 首先在所有資料中經過n 1次比較選出最小的數,把它與第1個資料交換,2 然後在其餘的資料內選出排序碼最小的數,與第2個資料交換.依次類推,直到所有資料排完為止。在第i 趟排序中選出最小關鍵字的資料,需要做n i次比較。複雜度 總的比較次數為 n n 1 2 o n...