花費時間很多的一種排序演算法
我們有 a1,a2…an個資料,
a1和a2比較
如果a1>a2
a1 a2交換位置
然後a2 和 a3 比較,一直比到 an。
這是一次輪迴,每次輪迴,an都是最大(或最小,根據a1 a2的判斷條件)的數
第一次排序,an已經為最大(或最小)
然後進行第二次比較,第二輪 陣列去掉最後乙個最大的值,其他繼續進行排序。
理論上 要進行 n(n-1)/2 次 交換.
# 使用python 來實現這個演算法
import random
random_list =
[ random.randint(1,
20)for i in
range(10
)]# 有10個元素,理論上要進行10輪排序
# 第一次排序,要進行9次交換。
# 第二次排序,要進行8次交換
list_len =
len(random_list)-1
# 減一,避免陣列越界的問題
print
(random_list)
for i in
range(10
):sort_over =
true
# 氣泡排序,進行優化
for j in
range
(list_len - i )
:"""
# 如果i=3,那麼最後3位已經排序好了
# 只需要再排序 len - i 次即可
"""if random_list[j]
> random_list[j+1]
: random_list[j]
,random_list[j+1]
= random_list[j+1]
,random_list[j]
# 第i輪,j和j+1 進行交換
print
(f",,swap:"
,random_list)
sort_over =
false
else
:print
(f",,swap:"
,random_list)
if sort_over ==
true
:break
print
(random_list)
插入演算法,將乙個新陣列,插入到乙個有序序列中,並使序列繼續保持有序。
插入排序的話,可以將列表插入到乙個空表中。
或前n個是有序,後m個是待插入序列。
4,5,7,6,9,3
4,5,7 有序
6,9,3 待插入
剛才是的時候,把第乙個元素當做有序序列,後面的是待插入序列~!
import random
random_list =
[random.randint(1,
20)for i in
range(0
,20)]
list_len =
len(random_list)
for i in
range(1
, list_len)
: j =
0 is_swap =
false
# 優化
# j為索引,有序
# i為待插入的值的索引
while j < i:
## 比較 0,1 的值,從小到大排序的
# 有序序列 從 0到j開始比較
# 一直到 待插入的資料,比有序序列小,停止
if random_list[j]
> random_list[i]
: is_swap =
true
# 除了此優化,還可以用二分查詢等方法
break
j = j +
1# 繼續下乙個比較
if is_swap ==
true
:continue
tmp = random_list[i]
# 插入的值
k = i # 記錄索引,一會會加減操作
# 資料移動
while k > j:
random_list[k]
= random_list[k -1]
k = k -
1# 插入資料
random_list[k]
= tmp
print
(random_list)
氣泡排序,插入排序 PYTHON
氣泡排序 使用 冒泡策略 把最大的元素移動到序列最右端。在一次冒泡過程中,相鄰元素進行比較。python a 5,4,12,3,5,6,9 def bubble sort num n len num for i in range n 1,0,1 for j in range 1,i 1 if num...
氣泡排序與插入排序
氣泡排序 void bubblesort int a,int n if flag 0 注意 1 每一趟通過比較相鄰兩個數的大小,最後實現最大的數放在最後面 插入排序 void insertionsort int a,int n a p temp 注意 1 比如10 9 8,假設手上拿的牌是10,需要...
氣泡排序與插入排序
氣泡排序 bubble sort 也是一種簡單直觀的 排序演算法 它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來.這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。插入排序 插入排序是一種最簡單直觀的排序演算法,它的工作原理是通過構建有序序列,對...