演算法基本思想(假設原始序列為l,長度為n):
三種排序演算法的比較:
import copy
def bubblesort(l, n):
""" 氣泡排序:每次選出最大元素放在末尾
l: 待排序列表;
n: 列表長度;
"""for i in range(n):
flag = false
for j in range(n-i-1):
if l[j]>l[j+1]:
temp = l[j]
l[j] = l[j+1]
l[j+1] = temp
flag = true
if flag == false:
break
print(l[:n-i-1],"|", l[n-i-1:])
return l
def insertsort(l,n):
""" 插入排序:每次從未排序區選乙個值插入已排序區
l: 待排序列表;
n: 列表長度;
"""for i in range(1,n):
print(l[:i],"|", l[i:])
value = l[i]
# j的範圍是從i-1到-1,這樣做的目的是:當j比較到0位置時會有兩種情況(移動元素、不移動元素),
# 使j最小至-1可以不必特殊處理這種情況。
for j in range(i-1,-2,-1):
if j == -1:
break
if valuel[j]:
minimum = l[j]
min_idx = j
if min_idx != i:
temp = l[i]
l[i] = minimum
l[min_idx] = temp
return l
if __name__ == "__main__":
l = [6,5,4,3,2,1,0]
n = len(l)
print("\n氣泡排序過程:")
print(bubblesort(copy.deepcopy(l),n))
print("\n插入排序過程:")
print(insertsort(copy.deepcopy(l),n))
print("\n選擇排序過程:")
print(selectsort(copy.deepcopy(l),n))
氣泡排序過程:
[5, 4, 3, 2, 1, 0] | [6]
[4, 3, 2, 1, 0] | [5, 6]
[3, 2, 1, 0] | [4, 5, 6]
[2, 1, 0] | [3, 4, 5, 6]
[1, 0] | [2, 3, 4, 5, 6]
[0] | [1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6]
插入排序過程:
[6] | [5, 4, 3, 2, 1, 0]
[5, 6] | [4, 3, 2, 1, 0]
[4, 5, 6] | [3, 2, 1, 0]
[3, 4, 5, 6] | [2, 1, 0]
[2, 3, 4, 5, 6] | [1, 0]
[1, 2, 3, 4, 5, 6] | [0]
[0, 1, 2, 3, 4, 5, 6]
選擇排序過程:
| [6, 5, 4, 3, 2, 1, 0]
[0] | [5, 4, 3, 2, 1, 6]
[0, 1] | [4, 3, 2, 5, 6]
[0, 1, 2] | [3, 4, 5, 6]
[0, 1, 2, 3] | [4, 5, 6]
[0, 1, 2, 3, 4] | [5, 6]
[0, 1, 2, 3, 4, 5] | [6]
[0, 1, 2, 3, 4, 5, 6]
資料結構與演算法之基礎排序 冒泡 插入 選擇 《十》
先介紹基礎的排序方法 1.氣泡排序 氣泡排序是一種簡單的排序演算法 其基本思路就是迭代對輸入序列的第乙個元素到最後乙個元素進行兩兩比較。優點可以檢測已排序序列 實現簡單 缺點 速度太慢o n 2 演算法 1.兩兩相比較 若大於或小於則替換 2.重複上述過程 遍歷序列 2.選擇排序 選擇排序是一種原地...
Java 資料結構6 插入,選擇,氣泡排序演算法
插入排序 直接插入排序基本思想是每一步將乙個待排序的記錄,插入到前面已經排好序的有序序列中去,直到插完所有元素為止。private static void insertionsort int array 然後將其放到找到的位置上 array j temp for int i 0 i array.le...
排序演算法 插入 選擇 冒泡 快排 歸併
可以找一些帖子理解下幾類排序演算法或者聽下陳越姥姥在mooc上的資料結構 選擇類排序 交換類排序 歸併排序 基數排序 拓撲排序 從待排序的n個記錄中的第二個記錄開始,依次與前面的記錄比較並尋找插入的位置,每次外迴圈結束後,將當前的數插入到合適的位置。void sort insert int a,in...