排序演算法 2 選擇排序

2021-09-11 10:29:50 字數 3470 閱讀 4247

簡單選擇排序是一種選擇排序

選擇排序:每趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結束為止。

簡單排序很簡單,它的大致處理流程為:

動態效果示意圖:

舉例說明,處理過程示意圖如下所示:

如圖所示,每趟排序中,將當前i小的元素放在位置i上。

c++:

#include

#include

using

namespace std;

// 簡單選擇排序

vector<

int>

selectsort

(vector<

int> list)}if

(index == i)

// 將找到的第i個小的數值放在第i個位置上

swap

(result[i]

, result[index]);

cout <<

"第"<< i +

1<<

"趟:\t"

;for

(int i =

0; i < result.

size()

; i++

) cout << endl;

}return result;

}void

main()

; vector<

int>

test

(arr, arr +

sizeof

(arr)

/sizeof

(arr[0]

)); cout <<

"排序前"

<< endl;

for(

int i =

0; i < test.

size()

; i++

) cout << endl;

vector<

int> result;

result =

selectsort

(test)

; cout <<

"排序後"

<< endl;

for(

int i =

0; i < result.

size()

; i++

) cout << endl;

system

("pause");

}

執行結果:

函式說明:簡單選擇排序(公升序)

author:

www.cuijiahua.com

parameters:

input_list - 待排序列表

returns:

sorted_list - 公升序排序好的列表

'''iflen

(input_list)==0

:return

sorted_list = input_list

length =

len(sorted_list)

for i in

range

(length)

: min_index = i

for j in

range

(i +

1, length)

:if sorted_list[min_index]

> sorted_list[j]

: min_index = j

if min_index == i:

continue

temp = sorted_list[i]

sorted_list[i]

= sorted_list[min_index]

sorted_list[min_index]

= temp

return sorted_list

if __name__ ==

'__main__'

: input_list =[6

,4,8

,9,2

,3,1

]print

('排序前:'

, input_list)

sorted_list = selectsort(input_list)

print

('排序後:'

, sorted_list)

執行結果同上。

補充乙個 python 實現:

def

select_sort

(ary)

: n =

len(ary)

for i in

range(0

,n):

min= i #最小元素下標標記

for j in

range

(i+1

,n):

if ary[j]

< ary[

min]

:min

= j #找到最小值的下標

ary[

min]

,ary[i]

= ary[i]

,ary[

min]

#交換兩者

其中,n2為n^2。

簡單選擇排序的比較次數與序列的初始排序無關。 假設待排序的序列有 n 個元素,則比較次數總是****n (n - 1) / 2

而移動次數與序列的初始排序有關。當序列正序時,移動次數最少,為 0.

當序列反序時,移動次數最多,為3n (n - 1) / 2。

所以,綜合以上,簡單排序的時間複雜度為o(n^2)

簡單選擇排序需要占用1個臨時空間,用於儲存最小值得索引。

排序演算法2 選擇排序

選擇排序 selection sort 通過多次比較和交換來實現排序,其排序流程如下 1.選取陣列中最小的乙個元素和陣列的第乙個元素交換。2.接著從剩下的所有元素中選擇最小的與第二個元素交換。3.和第二步同樣的方法對剩下的所有元素進行排序,最後便可得到按照從大到小的順序排好陣列中的各元素。具體過程如...

排序演算法2 選擇排序

選擇排序 最好最壞時間複雜度 n 2 public class selectsort 預設最小值 int min 0 記錄最小值下標 int minindex 0 for int i 0 i arr.length 1 i 發現最小值改變才進行交換 if min arr i system.out.pr...

排序演算法(2) 選擇排序 堆排序

繼續上篇的 交換排序 氣泡排序 快速排序,本篇介紹選擇排序和堆排序 一 選擇排序 非常的簡單直觀,每次找出最小或者最大的值儲存起來,繼續找剩下的值儲存起來,直達最後乙個元素。從arr 0 arr n 中找出最小的值,放在arr 0 此時arr 0 已經排好序 從arr 1 arr n 中找出最小的值...