Python 簡單選擇排序

2021-09-18 03:24:33 字數 4277 閱讀 3979

總結

#解析版

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...