簡單選擇排序

2021-08-18 17:52:27 字數 1409 閱讀 2212

一.定義:

1.屬於選擇排序

2.兩兩比較大小,找出極值(極大值或極小值)被放在固定的位置,這個固定位置一般指的是某一端

3.結果分為公升序和降序排列

4.降序:n個數從左至右,索引從0開始到n-1,兩兩依次比較,記錄大值索引,此輪所有數比較完畢,將大數和索引0數交換,如果大數就是索引0,不交換.第二輪,從索引1開始比較,找到最大值,將它和索引1位置交換,若它就在索引1位置則不交換.以此類推,每次左邊都會固定下乙個大數.

5.公升序:和降序相反.

二.實現方法:

nums=[1,3,2,4,5,7,6]

length=len(nums)

for i in range(length):

maxindex=i

for j in range(i+1,length):

if nums[j]>nums[maxindex]:

maxindex=j

if i!=maxindex:

nums[i],nums[maxindex]=nums[maxindex],nums[i]

三.優化方法:二元選擇排序

同時固定左邊最大值和右邊最小值,減少迭代元素的次數

1.length//2整除,通過幾次運算就可以發現規律

2.由於使用了負索引,所以條件中要增加i==length + minindex

nums=[1,3,2,4,5,7,6]

length=len(nums)

for i in range(length//2): #利用負索引右置最小值

maxindex=i

minindex=-i-1

minorigin=minindex

for j in range(i+1,length-i):

if nums[maxindex]nums[-j-1]:

minindex=-j-1

if i!=maxindex:

nums[i],nums[maxindex]=nums[maxindex],nums[i]

if i == minindex or i==length + minindex: #若最小值被交換過,要更新索引

minindex = maxindex

if minorigin != minindex:

nums[minorigin],nums[minindex]=nums[minindex],nums[minorigin]

if minorigin != minindex and nums[minorigin] == nums[minindex]: #此處優化為排除元素值都相等的情況

nums[minorigin],nums[minindex]=nums[minindex],nums[minorigin]

簡單選擇排序 簡單選擇排序詳解

n個記錄的檔案的直接選擇排序可經過n 1趟直接選擇排序得到有序結果 初始狀態 無序區為r 1.n 有序區為空。第1趟排序 在無序區r 1.n 中選出關鍵字最小的記錄r k 將它與無序區的第1個記錄r 1 交換,使r 1.1 和r 2.n 分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區...

選擇排序 簡單選擇排序

在要排序的一組數中,選出最小 或者最大 的乙個數與第1個位置的數交換 然後在剩下的數當中再找最小 或者最大 的與第2個位置的數交換,依次類推,直到第n 1個元素 倒數第二個數 和第n個元素 最後乙個數 比較為止。第一趟,從n個記錄中找出關鍵碼最小的記錄與第乙個記錄交換 第二趟,從第二個記錄開始的n ...

選擇排序 簡單選擇排序

1.選擇排序 簡單選擇排序,堆排序 與交換排序 氣泡排序,快速排序 的區別 每次比較如果發現較小的元素在後面,就交換兩個相鄰的元素。而選擇排序演算法的改進在於 先並不急於調換位置,先從a 1 開始逐個檢查,看哪個數最小就記下該數所在的位置p,等一躺掃瞄完畢,再把a p 和a 1 對調,這時a 1 到...