選擇排序(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 中找...