選擇排序 堆排序

2021-08-04 16:43:02 字數 1053 閱讀 2820

選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法(比如序列[5, 5, 3]第一次就將第乙個[5]與[3]交換,導致第乙個5挪動到第二個5後面)

排序思想:

對比陣列中前乙個元素跟後乙個元素的大小,如果後面的元素比前面的元素小則用乙個變數k來記住他的位置,接著第二次比較,前面」後乙個元素」現變成了」前乙個元素」,繼續跟他的」後乙個元素」進行比較如果後面的元素比他要小則用變數k記住它在陣列中的位置(下標),等到迴圈結束的時候,我們應該找到了最小的那個數的下標了,然後進行判斷,如果這個元素的下標不是第乙個元素的下標,就讓第乙個元素跟他交換一下值,這樣就找到整個陣列中最小的數了。然後找到陣列中第二小的數,讓他跟陣列中第二個元素交換一下值,以此類推

//選擇排序

void selectsort(int arr,int

size)

}swap(arr[k],arr[i]);

}}

堆分為大根堆和小根堆,是完全二叉樹。大根堆的要求是每個節點的值都不大於其父節點的值。在陣列的非降序排序中,需要使用的就是大根堆,因為根據大根堆的要求可知,最大的值一定在堆頂。

既然是堆排序,自然需要先建立乙個堆,而建堆的核心內容是調整堆,使二叉樹滿足堆的定義(每個節點的值都不大於其父節點的值)。接下來就是調堆和迴圈調堆

//堆排序,以小堆為例

//調整堆

void adjust(int arr, size_t root, size_t size)

//如果孩子節點小於父親節點,交換二者,將較小的節點向上調整

if (arr[child] < arr[parent])

else

break;}}

void heapsort(int arr, int

size)

//排序

int idx = size - 1;

while (idx>0)

}

排序 選擇排序 選擇排序 堆排序

寫在前面 上傳github交換排序選擇排序 堆排序 選擇排序 顧名思義,我們就可以猜到,它是原則合適的元素放到合適的位置 從圖中,我們可以得到 1.用第乙個元素,和其他所有的元素進行比較,找出最小的,然後進行交換 2.然後進行,資料的遞增 3.直到資料全部有序 void selectsort int...

選擇排序 堆排序

堆排序 堆排序分為兩個過程 1 將原來無序的數列,轉化成堆序列 建初識堆的過程 2 輸出堆頂元素並調整建新堆的過程 資料結構偽 typeof sqlist heaptype void heapadjuisti heaptype h,int s int m for i h.length i 1 i c...

選擇排序 堆排序

一 選擇排序 演算法 每次從餘下待排序記錄中通過比較找到最小的,通過交換,放在待排序記錄的首位。直到全部記錄排好序。具體如下 1 第1趟,從a 0.n 1 中找到最小的記錄,與a 0 交換 2 第2趟,從a 1.n 1 中找到最小的記錄,與a 1 交換 n 1 第n 1趟,從a n 2.n 1 中找...