一.定義:
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 到...