資料結構 選擇排序

2021-09-29 01:25:22 字數 1615 閱讀 6229

直接選擇排序:每一趟都從資料元素中選出最小(或最大)的乙個元素,並將其存放在序列的起始位置(或末端位置),直到將所有資料元素排完。

具體方法:

我們看一下排序簡要過程:

原序列:7 4 5 9 8 2

上述過程的**片:

首先我們先實現乙個交換函式:

void

swap

(int

*a,int

* b)

直接選擇排序:

void

directselectionsort

(int

* a,

int n)

if(a[i]

> a[max])}

swap (

&a[min]

,&a[begin]);

if(max == begin)

swap (

&a[max]

,&a[end]);

++begin;

--end;

}}

總結

效率不高

穩定性:不穩定

時間複雜度:o(n2)

空間複雜度:o(1)

堆排序:指利用堆積樹(堆)這種資料結構所設計的一種排序演算法,它是一種選擇排序,通過堆來進行選擇資料。

公升序建大堆,降序建小堆

具體操作(向下調整):

從最後乙個父親結點反方向直到根節點a[0],依次對其中的每乙個節點a[i]執行向下調整;

由於在陣列中下標從0開始,所以在堆中i的左子結點為2 * i+1,右子結點為2 * i+2。

// 向下調整----降序建小堆

void

adjustdown

(int

* a, size_t n, size_t parent)

else

return;}

}

// 向下調整----公升序建大堆

void

adjustdown

(int

* a, size_t n, size_t parent)

else

return;}

}

堆排序的實現:(公升序建大堆,降序建小堆)不影響這塊**

void

heapsort

(int

* a, size_t n)

// 堆排序

int end = n -1;

while

(end >0)

}

列印堆:

void

printheap

(int

* a, size_t n)

// 列印堆

printf

("\n");

}

總結

穩定性:不穩定

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

空間複雜度:o(1)

資料結構 排序 選擇排序

選擇排序 所謂選擇排序,就是不斷從剩下的元素中選擇最小的元素放入前面,那麼 前面 我們就從下標為 0 i 0 的第乙個元素開始 此時我們假設下標為 0 的元素是最小的,minindex 0,minindex 就是最小值的索引 相應的剩下的元素則從 i 1 的位置開始,也就是從 1 開始,然後依次與 ...

資料結構 排序(選擇排序)

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

資料結構 選擇排序

選擇排序是一種比較直觀的排序方法 選擇排序的思想在於 預設公升序排序 在乙個陣列當中,選擇這個陣列當中最小的元素,將這個元素放在第一位,然後尋找第二小的元素,將這個元素放在第二位。以此類推,直到將這個陣列完成排序。這是乙個比較直觀的排序方法 選擇排序 演算法思想 在遍歷陣列的時候 找出陣列當中最小的...