演算法 5 選擇排序

2021-07-25 01:29:46 字數 2748 閱讀 6064

1. 選擇排序

由小到大排序的過程

第一趟相當於找到最小值並放在首位

第二趟相當於找到次小值,並放在第2的位置上

以此類推

b. 與氣泡排序的區別

在找最小數的同時氣泡排序會交換資料,而選技排序不會交換只是查詢最小數,找到了才交換

下面是冒泡的理解:

第1個數與剩下的n-1個數比較,若有比第1個數小的就交換,讓第1個數始終存

本趟最小的數

第2個數

與剩下的n-2個數比較,若有比第2個數小的就交換,讓第2個數始終存本趟最小的數

1.2 **

#include 

#include 

#define dbmsg(fmt, args ...

) printf(

"%s:%s[%d]: "fmt"\n"

, __file__,__function__, __line__,

##args)

#define swap(x,y)

(x=(x)

+(y)

,y=(x)

-(y)

,x=(x)

-(y)

)int dum_array(

int* arr,

intlen

)printf(

"\n");

return 0;

}int select_min_index(

int*arr,

int start,

intend

)int select_sort(

int* arr,

intlen

)return 0;

}int main (

int argc, char *argv)

;int arr=

;int

len= sizeof(arr)

/sizeof(

int)

;dbmsg(

"len=%d"

,len);

dbmsg(

"before sort:");

dum_array(arr,

len)

;select_sort(arr,

len)

;dbmsg(

"after sort:");

dum_array(arr,

len)

;return exit_success;}

1.3 執行結果

select.c:main[51]: before sort:

49  38  65  97  76  13  27  49  55  4  

select.c:select_min_index[22]: s=0,e=10

select.c:select_sort[38]: j=9

4  38  65  97  76  13  27  49  55  49  

select.c:select_min_index[22]: s=1,e=10

select.c:select_sort[38]: j=5

4  13  65  97  76  38  27  49  55  49  

select.c:select_min_index[22]: s=2,e=10

select.c:select_sort[38]: j=6

4  13  27  97  76  38  65  49  55  49  

select.c:select_min_index[22]: s=3,e=10

select.c:select_sort[38]: j=5

4  13  27  38  76  97  65  49  55  49  

select.c:select_min_index[22]: s=4,e=10

select.c:select_sort[38]: j=7

4  13  27  38  49  97  65  76  55  49  

select.c:select_min_index[22]: s=5,e=10

select.c:select_sort[38]: j=9

4  13  27  38  49  49  65  76  55  97  

select.c:select_min_index[22]: s=6,e=10

select.c:select_sort[38]: j=8

4  13  27  38  49  49  55  76  65  97  

select.c:select_min_index[22]: s=7,e=10

select.c:select_sort[38]: j=8

4  13  27  38  49  49  55  65  76  97  

select.c:select_min_index[22]: s=8,e=10

select.c:select_sort[38]: j=8

4  13  27  38  49  49  55  65  76  97  

select.c:select_min_index[22]: s=9,e=10

select.c:select_sort[38]: j=9

4  13  27  38  49  49  55  65  76  97  

select.c:main[54]: after sort:

4  13  27  38  49  49  55  65  76  97

1.4 效能

o(n2)

常見排序演算法總結 5 選擇排序

5 選擇排序 將陣列中待排序的元素中最小 大 的元素取出,放在陣列中已排序的元素序列的末尾,直至陣列中沒有待排序的元素 舉例 分析 對於n個元素的陣列,進行了 n 1 次選擇,每次選擇進行了 n 1 1次比較,平均每次選擇了n 2次,一共比較了n n 1 2次 邏輯 首先做乙個i 0 i n的迴圈a...

演算法 day5 選擇排序

選擇排序是一種簡單直觀的排序演算法,它的工作原理是每一次從待排序的資料元素中選出最小 最大 的乙個元素,存放在序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到全部待排序的資料元素排完。選擇排序是不穩定的排序方法。選擇排序,內層迴圈,每一圈選出...

5 選擇排序

1 思路 對待排序的序列,選出關鍵字最小的資料,將它和第乙個位置的資料交換,接著,選出關鍵字次小的資料,將它與第二個位置上的資料交換。以此類推,直到完成整個過程。所以如果有n個資料,那個需要遍歷n 1遍。2 複雜度分析 2.1 時間複雜度 總的比較次數為 n 1 n 2 1 1 2 n n 1 o ...