資料結構 選擇排序(直接選擇 堆排序)

2021-10-07 23:10:35 字數 1980 閱讀 5907

1 選擇排序的基本思想

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

2 直接選擇排序

2.1 演算法步驟

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

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

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

2.2 **實現

void

swap

(int

* left,

int* right)

void

selectsort

(int array,

int size)

if(maxpos != size - i -1)

}}

以上**僅標記maxpos位置,效率較低。可一起標記maxpos和minpos兩個位置,同時尋找,效率增大一倍,**如下:

void

swap

(int

* left,

int* right)

void

selectsortop

(int array,

int size)

//最大元素放最後

if(maxpos != end)

swap

(&array[maxpos]

,&array[end]);

//如果end位置儲存的剛好是最小元素,上面的交換就將最小元素位置更改了

//最小元素位置發生了改變,則必須更新minpos

if(minpos == end)

minpos = maxpos;

//最小元素放最前

if(minpos != begin)

swap

(&array[minpos]

,&array[begin]);

++begin;

--end;

}}

2.3 特性

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

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

空間複雜度:o(1)

穩定性:不穩定

3 堆排序

3.1 基本思想

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

3.2 演算法步驟

1.建堆(利用向下調整的思想,具體大堆還是小堆看公升序還是降序)

2.排序(利用堆刪除的思想進行排序)

3.3 **實現

void

swap

(int

* left,

int* right)

//向下調整

void

heapadjust

(int array,

int size,

int parent)

else}}

void

heapsort

(int array,

int size)

}

3.4 特性

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

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

空間複雜度:o(1)

穩定性:不穩定

資料結構 直接選擇排序和堆排序

每一次從待排序的資料元素中選出最小 最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。選擇排序 每一次從未排序的資料中找到乙個最小的,把最小的放到未排序的資料的頭部,不斷重複 void swap int arr,int pos1,int pos2 void selectsort ...

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

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

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

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