用Python實現各種排序算法

1.冒泡排序

比較相鄰的元素大小,將小的前移,大的后移,就像水中的氣泡一樣,最小的元素經過幾次移動,會最終浮到水面上。
<pre><code>
def bubble(list):
for i in range(len(list)):
for j in range(0,len(list)-1-i):
if list[j] > list[j+1]:
list[j],list[j+1]=list[j+1],list[j]

if name == 'main':
list1 = [2,3,5,7,8,9,6,54,1,42]
bubble(list1)
print(list1)
</code></pre>

2.插入排序

將一個待排數據按其大小插入到已經排序的數據中的適當位置,直到全部插入完畢。
<pre><code>
def insertsort(list):
if list != None:
if len(list) == 1:
pass
else:
for i in range(1,len(list)):#start with second item.
temp = list[i]
for j in range(i):
if list[j]>list[i]:
for k in range(i,j,-1):#
list[k]= list[k-1]
list[j] = temp

if name == 'main':
list1 = [3,2,7,5,8,9,6,54,1,42]
insertsort(list1)
print(list1)
</code></pre>

3.快速排序

(1)這里實現第一輪排序,不妨稱第一個元素為錨
(2)i,j分別指向待排序序列的第一和最后一個元素
(3)j與錨比較,若大于錨則左移,直到小于錨的元素停下,與i指向元素交換,i后移
(4)接著,i與錨比較,若小于則右移,直到大于錨的元素停下,與j指向的元素交換,j前移,
(5)i,j交替移動,i==j時,錨temp到達最終位置。

<pre><code>
L = [90,89,78,67,56,45,34,23,12,0]
def first_sort(numbers,i,j):
temp = numbers[i]
while i!=j:
while i<j and numbers[j]>temp:
j = j - 1
if i < j
numbers[i] = numbers[j]
i = i + 1
while i < j and numbers[i]<temp:
i = i + 1
if i <j:
numbers[j] = numbers[i]
j = j - 1
numbers[i] = temp
return i

def quick_sort(numbers,i,j):
if i<j:
middle = first_sort(numbers,i,j)
quick_sort(numbers,i,middle-1)
quick_sort(numbers,middle+1,j)

if name=='main':
quick_sort(L,0,len(L)-1)
print
</code></pre>

4.選擇排序

從所有序列中先找到最小的,然后放到第一個位置。之后再看剩余元素中最小的,放到第二個位置……以此類推,就可以完成整個的排序工作。
<pre><code>
def selectionsort(list):
if list != None:
for i in range(len(list)):
min = i
for j in range(i+1,len(list)):
if list[min] > list[j]:
min = j
if min != i:
list[min],list[i] = list[i],list[min]

if name == 'main':
list1 = [2,3,5,7,8,9,6,54,1,42]
selectionsort(list1)
print(list1)
</code></pre>

5.希爾排序

先將整個待排元素序列分割成若干個子序列(由相隔某個“增量”的元素組成的)分別進行直接插入排序,然后依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。
<pre><code>
test=[9,2,3,5,7]

def ShellSort(data,flag):
'''
data: list,to be sorted
flag: 0->asc,1->desc
return a new sorted list
'''
retData=[]

#copy data to retData
for item in data:
    retData.append(item)    

#sort retData
count=len(retData)
step=count/2;
while step>0:
    i=0
    while i&lt;count:
        j=i+step
        while j&lt;count:
            t=retData.pop(j)
            k=j-step
            #asc
            if flag==0:
                while k>=0:
                    if t>=retData[k]:
                        retData.insert(k+1, t)
                        break
                    k=k-step
                    
                if k &lt; 0:
                    retData.insert(0, t)
            #desc
            elif flag==1:    
                while k>=0:
                    if t&lt;=retData[k]:
                        retData.insert(k+1, t)
                        break
                    k=k-step
                if k&lt;0:
                    retData.insert(0, t)
                    
            j=j+step
        
        i=i+1
    
    step=step/2

return retData

data=ShellSort(test,0)
print 'Asc:',data
data=ShellSort(test,1)
print 'Desc:',data
</code></pre>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容

  • 概述 排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    蟻前閱讀 5,213評論 0 52
  • 概述:排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,740評論 0 15
  • 【日精進打卡第30天】: 姓名:余成杰 公司:貞觀電器 盛和塾《六項精進》224期學員 【知-學習】 《六項精進》...
    余成杰閱讀 147評論 0 0
  • 常見的樣式 屬性 :屬性值 width : 寬度 heigth: 高度 background 背景 ——borde...
    小小彭007閱讀 159評論 0 0
  • 事實證明我不僅脆弱,而且很弱。我曾經給自己起網名叫行走中的玫瑰。玫瑰還有刺呢,我什么也沒有。什么都太在乎,總是弱弱...
    行走中的玫閱讀 89評論 0 0