排序之選擇排序

2021-08-21 16:38:34 字數 1420 閱讀 4310

二、選擇排序

1、選擇排序(區間在不斷地變小 )

基本思想:

選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。 (首先,選出最小的數放在第一位,然後選擇第二小的數,放在第二位;以此類推,直到所有的數從小到大排列.那麼,對於大小為n的陣列需要n-1輪選擇過程。第i輪選取第i小的數,請將其放在第i個位置上。)

注意點:

選擇排序與氣泡排序的區別:氣泡排序通過依次交換相鄰兩個順序不合法的元素位置,從而將當前最小(大)元素放到合適的位置;而選擇排序每遍歷一次都記住了當前最小(大)元素的位置,最後僅需一次交換操作即可將其放到合適的位置

// 選擇排序(普通版)

選擇排序公升級版(每次分別選擇最大和最小的數字,交換兩者)

void swap(int &a, int &b)

// 選擇排序(公升級版)

void selectsort_up(int *a, int n)

// 此時找到了區間內最大的和最小的,交換兩者

swap(a[minspace], a[minpos]);

//bug

if (minspace == maxpos)

maxpos = minpos;

swap(a[maxspace], a[maxpos]);

minspace++;

maxspace--;}}

2、堆排序(一種不穩定的排序演算法)

以前就寫過有關堆的知識點,有興趣的可戳鏈結

(1)先建立好堆。公升序排列時建立大堆,降序排列時建立小堆

注:重複上圖的過程一直到堆排列有序

//調整堆

void adjustheap(int array, size_t size, size_t parent)

//用最大的孩子去檢測雙親

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

else

return;}}

//堆排序

void heapsort(int* array, size_t size)

//堆排序

for (int i = 0; i < size; i++)

}

排序之選擇排序

書接上文,下面是選擇排序。選擇排序是最容易想到也是最容易實現的排序方式。主要思想 n個元素的陣列,每次從原陣列中找到最小的乙個元素,將這個元素加入新陣列,再把這個元素從元陣列中刪除,就完成了一次選擇。經過n 1次選擇後原陣列中剩下乙個元素,就是最大的乙個元素,將他加入新陣列裡,就完成了選擇排序。這個...

排序之選擇排序

選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。選擇排序是不穩定的排序方法。乙個長度為n的待排序列,先找出 0,n 1 區間內最小的數,放在第一位,再找出 2...

排序之選擇排序

選擇排序的基本思想是每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。直接選擇排序 在待排序元素集合array i array n 1 中選擇關鍵碼最大 小 的資料元素 若它不是這組元素中的最後乙個 第乙個 元素,則將它與這組元素中的最後乙個...