總結
#解析版
nums =
list
(range(10
))# 生成0~9的十個數
import random #匯入模組
random.shuffle(nums)
# 匯入shuffle隨機生成樹模組,將該列表隨機打亂
print
(nums)
#列印出隨機打亂列表後的效果
length =
len(nums)
#計算長度
count_iter =
0#計算迭代次數
count_swap =
0#計算交換次數
#選擇排序
for i in
range
(length)
:# 迭代從0開始
maxindex = i # 預設迭代第一次是數就是最大值,即索引為0為最大值
for j in
range
(i+1
, length)
:# 迭代從1開始
count_iter +=
1if nums[j]
> nums[maxindex]
:#當maxindex即i=0,j=1~9,
maxindex = j #,如果索引為j大於索引為maxindex,則最大值即maxindex=j,變為索引為j
if i != maxindex:
#如果上述if語句有成立,則證明maxindex有變過,即i != maxindex
nums[i]
, nums[maxindex]
= nums[maxindex]
, nums[i]
#兩個索引位置的元素交換
count_swap +=
1print
(nums, count_iter, count_swap)
#列印列印出排好序的列表,迭代和交換過的次數
#純淨版
nums =
list
(range(10
))import random
random.shuffle(nums)
print
(nums)
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]
print
(nums)
優化實現 二元選擇排序
同時固定左邊最大值和右邊最小值
優點:減少迭代元素的次數
#解析版
nums =
list
(range(10
))# 生成0~9的十個數
import random #匯入模組
random.shuffle(nums)
# 匯入shuffle隨機生成樹模組,將該列表隨機打亂
print
(nums)
#列印出隨機打亂列表後的效果
length =
len(nums)
#計算長度
count_iter =
0#計算迭代次數
count_swap =
0#計算交換次數
for i in
range
(length //2)
:#length // 2 整除,因為一輪迴圈同時確定了左右兩個極值,所以i=[0,1,2,3]
maxindex = i # 預設迭代第一次是數就是最大值,即索引為0為最大值
minindex =
-i -
1# 預設迭代第一次是數就是最小值,即索引為-1為最小值
minorigin = length + minindex # 將負索引轉換為正索引
for j in
range
(i+1
, length-i)
:#當i=0,j=[1~9);當i=1,j=[2~8),當i=3,j=[4,6)
count_iter +=
1if nums[j]
> nums[maxindex]
:#第一次當i=0,j取[1~8)
maxindex = j #如果索引為j大於索引為maxindex,則最大值即maxindex=j,變為索引為j
if nums[
-j -1]
< nums[minindex]
:#第一次當i=0,j取[1~8),-j -1 = -2,即索引[-2]與[-1]比較
minindex =
-j -
1# 如果有發現比索引[minindex]還小的,則進行交換.
if nums[maxindex]
== nums[minindex]
: braek #元素都相同
if i != maxindex:
#如果上述if nums[j] > nums[maxindex] 語句有成立,則證明maxindex有變過,即i != maxindex
nums[i]
, nums[maxindex]
= nums[maxindex]
, nums[i]
#兩個索引位置的元素交換
count_swap +=
1if i == minindex:
minindex = maxindex #修正索引,
if minindex != minorigin and nums[minorigin]
!= nums[minindex]
:# 索引不同,但是值相同,沒有必要交換
nums[minorigin]
, nums[minindex]
= nums[minindex]
, nums[minorigin]
#兩個索引位置的元素交換
#count_swap += 1
print
(nums, count_iter, count_swap)
# 純淨版
nums =
list
(range(10
))import random
random.shuffle(nums)
print
(nums)
length =
len(nums)
for i in
range
(length //2)
: maxindex = i
minindex =
-i -
1 minorigin = length + minindex
for j in
range
(i+1
, length-i)
:if nums[j]
> nums[maxindex]
: maxindex = j
if nums[
-j -1]
< nums[minindex]
: minindex =
-j -
1if nums[maxindex]
== nums[minindex]
: braek
if i != maxindex:
nums[i]
, nums[maxindex]
= nums[maxindex]
, nums[i]
if i == minindex:
minindex = maxindex
if minindex != minorigin and nums[minorigin]
!= nums[minindex]
: nums[minorigin]
, nums[minindex]
= nums[minindex]
, nums[minorigin]
print
(nums)
簡單選擇排序 python
原理 每一趟從待排序的元素中選出最小 最大 的元素,順序放在待排序的序列中最前,直到全部元素排序完成 假設初始為 7,3,8,5,6,1,9,4,2 第一趟排序後 1,7,3,8,5,6,9,4,2 第二趟排序後 1,2,7,3,8,5,6,9,4 第三趟排序後 1,2,3,7,8,5,6,9,4 ...
Python 簡單選擇排序
這種排序就是在要選取的列表中選取最小的值,把最小的值放到序列的第一位,再進行將剩餘的值重複上述操作,直到剩餘序列為0。序列就是乙個有序的序列了。分析 現有一組序列,我們把它放入列表中 a 10,2,5,1,3,7,3 1.使用迴圈改變每一次的待排序序列從哪一位開始,從下標0開始到len a 1 2....
排序 簡單選擇排序 Python
每一輪迴圈中,找到待排序列中的最小值,將其和待排序列頭元素交換,最終達到有序 對序列 2,4,1,3,6,5 按公升序排列 2,4,1,3,6,5 1,4,2,3,6,5 1,2,4,3,6,5 1,2,3,4,6,5 1,2,3,4,6,5 1,2,3,4,5,6 class solution p...