排序演算法 二 選擇排序

2021-07-12 07:23:37 字數 1233 閱讀 9372

之前給大家分享了排序演算法裡面比較簡單的氣泡排序,今天來分享一下選擇排序的演算法

選擇排序的思想:

1.(以公升序為例)在一組數中選出最大的數放到第乙個位置,或者選出最小的數放到最後乙個位置,

2.在選取剩餘元素的最大數放到第二個位置,或選出剩餘元素中的最小值放到倒數第二哥位置,

3.依次往下選取,直到遍歷完陣列為止。

具體步驟如圖所示:

**實現:

void selectsort(int *a, size_t size)

} tmp = a[min];//找到最小元素把它交換到相應位置上去

a[min] = a[i];

a[i] = tmp;

}}

這樣就實現了選擇排序,但它還不夠高效,我們可以考慮,每次遍歷陣列的時候可以選擇出最大和最小兩個元素,(假設為公升序),把最小元素放到最前面,把最大元素放到最後面。再縮小排序範圍為a[1]到a[size-2],遍歷陣列,找出最大元素和最小元素,放到相應位置,直到排序範圍縮小至0,就可以結束了

優化:每次遍歷找出最大和最小

如下圖所示:

**實現:

void selectsort(int *a, size_t size)

if (a[max] < a[j])

}//_swap(a[min], a[i]);

tmp = a[min];

a[min] = a[i];

a[i] = tmp;

tmp = a[max];

a[max] = a[size - 1];

a[size - 1] = tmp;

}}

很多人會把冒泡和選擇弄混,所以在最後呢,我會來分析一下選擇排序和氣泡排序的區別:

氣泡排序是用第乙個元素和後面的元素進行比較,把最大的交換到最後面的位置去。氣泡排序演算法在有序或接近有序是最優,它的時間複雜度為o(n^2)。

選擇排序呢是選出最大元素的下標,再根據下標將最大元素和最後面的元素交換。它的時間複雜度為o(n)。

好了,後面還會有一系列的排序演算法,學的失火一定要記清楚他們的區別,不要把他們弄混了。

排序演算法 二 選擇排序

演算法實現 selectsort.c include void selectsort int arr,int len if min i for k 0 k演算法思想 保證將要成為有序範圍內的那個位置的值是無序裡的最小值。ex 從陣列選出最小的放在第乙個位置上,在從剩餘陣列選出最小放在第二個位置上,以...

排序演算法(二) 選擇排序

選擇排序是一種簡單的直觀的排序演算法,基本原理如下 對於給定的一組記錄,經過一輪比較後得到最小的記錄,然後將該記錄的位置與第乙個記錄的位置交換 接著對不包括第乙個記錄以外的其他記錄進行第二次比較,得到最小記錄並與第二個位置記錄交換,重複該過程,直到進行比較的記錄只剩下乙個為止 從簡單排序的過程來看,...

排序演算法二 選擇排序

首先來看一下簡單選擇排序 思想 在未排序的序列中選出最小的元素和當前序列的第乙個元素互換,然後在剩下的元素中選出乙個與剩下元素的第乙個位置互換,依次交換,最後就會形成乙個從小到大的已排序序列。void selectsort int a,int n 迴圈完一遍 已找到最小元素 交換 a i a i a...