選擇 冒泡 插入排序演算法總結

2022-08-20 19:30:12 字數 1896 閱讀 6461

本文做的排序都是預設公升序排序,即從小到大,此為大前提

l = [2, 5, 3, 6, 1, 4, 0, 9, 18, 11, 15, 12]

#選擇排序:依次拿乙個元素(從第二個元素開始)和第乙個位置元素比較,

#如果比第乙個元素小就交換位置,這樣第一次迴圈結束,最小的數就放在了第乙個,以此類推

#第一層迴圈確定元素要放的位置,所以i的取值範圍是陣列長度減1,因為最後乙個不用比較了,肯定是最大的,

#第二層迴圈控制每次的迴圈次數,要從i+1個元素開始與第i個元素比較,所以j的取值範圍是i+1到陣列的最後乙個即len(l)

for i in range(len(l) - 1):

for j in range(i+1, len(l)):

if l[i] >l[j]:

l[i], l[j] =l[j], l[i]

print(l)

#

氣泡排序:相鄰的兩個元素比較,後乙個元素比前乙個元素小,兩個元素互換位置,

#那麼第一次迴圈結束,最大元素就到了陣列的最後乙個位置,以此類推

#第一層i確定總迴圈次數,總迴圈次數為陣列長度減一,

#例:只有乙個元素的陣列,是不用比較的,即比較次數為0,兩個元素的陣列,只需比較一次,比較次數=陣列長度-1,以此類推

#第二層j,控制每次迴圈比較的次數,比較次數是遞減的,大迴圈(i)每執行一次,就少乙個需要比較的值,所以j的取值範圍是len(l)-i-1

for i in range(len(l)-1):

for j in range( len(l)-i-1):

if l[j] > l[j+1]:

l[j], l[j+1] = l[j+1], l[j]

print(l)

#插入排序:陣列可以分為兩部分,一部分是有序陣列,另一部分是無序陣列,從無序陣列裡依次取值,跟有序陣列比較插入

#i代表從無序陣列取到值的下標,j代表有序陣列裡值的下標

#i從第二個元素開始即下標起始值是1,所以i的取值範圍是從陣列的第二個值的下標(1)到陣列的最後乙個值的下標,

#

第乙個元素看作是有序陣列的第乙個元素即j的起始值,

#j的起始值都是從i-1開始,依次遞減,到0

for i in range(1, len(l)):

x = l[i] #

x代表未排序的值

j=i-1

for j in range(j, -2, -1): #

j標記的是當前位置的值的下標

#j代表的是有序(預設公升序)陣列裡的下標

if l[j] > x: #

如果有序陣列裡的最大值比未排序的值大,那麼未排序的值就該往有序陣列裡插入,否則退出本次迴圈

l[j+1] = l[j] #

把有序陣列的最大值的下標改為未排序值的下標,此時,未排序值就被摘出來了,因為未排序值的下標和已排序的最大值的下標對應的值是一樣的,都是已排序陣列的最大值

# 即把有序陣列的最大值往後挪了一位,此時,下標為j和j+1指向的兩個值是一樣的

else

:

break

#如果第一次迴圈就執行到這裡,此時j=i-1, 及j的值指向有序陣列的最大值,那麼下面那行**不過是本身的值賦給本來的下標了

l[j+1] = x #

如果是最後一次,那麼就是當前迴圈(i)找到的最小值,插入到下標為0(因為迴圈正常結束,j的值是-1)的地方

#如果是中間次數,那麼l[j]>x不成立,退出本次迴圈,此時,j已指向前乙個值,比如上次迴圈j的值為3,那麼下標3和4的值是一樣的,

#因為3的值被賦給了4,那麼本次迴圈j的值是2,所以j+1指向3,該值就插到了3的位置上,即比2的值大並且比4的值小

print(l)

冒泡,選擇,插入排序演算法 總結

之前一直都沒有怎麼注意簡單演算法的編寫,現在重寫翻閱了下資料,才慢慢熟悉。package com.klay.sort public class klay int arr1 int arr2 bubbo arr for int i 0 i arr.length i system.out.println...

冒泡 選擇 插入排序演算法

1.氣泡排序 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數 也就是第一波冒泡完成 針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。...

排序演算法 冒泡 選擇 插入排序

本文簡單總結一下三大排序演算法,如有不足,請多多提意見。簡述 從小到大排序,每次比較兩個元素,看他們的順序有沒有錯,如果錯了就換過來。a 比較abc.元素,如果第乙個比第二個大,則將兩個元素交換位置 bac.再依次將a和c進行比較。b 對每一對相鄰的元素做同樣的工作,從第一對到最後一對。這一次執行完...