氣泡排序:是一種交換排序,它的基本思想是:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。最好的情況下 ,時間複雜度是n 最會的情況下 時間複雜度是n^2
def
bubble
(list):
for i in range(len(list))[::-1]:
for j in range(i):
if list[j]>list[j+1]:
list[j],list[j+1] = list[j+1],list[j]
return list
print bubble([2,4,1,9,6])
選擇排序:就是通過n-i次關鍵字之間的比較,從n-i+1個記錄中選出關鍵字最小的記錄,並和第i個記錄交換。
時間複雜度分析:最大的特點是交換移動資料的次數相當少,這樣就節約了相應的時間,最終的排序時間是比較與交換的時間的和,因此時間複雜度仍然是n^2。
應該說,儘管與氣泡排序同為n^2,但是選擇排序的效能上還是要略優於氣泡排序。
**實現:
def
selectsort
(list):
for i in range(len(list)-1):
min=i
for j in range(i+1,len(list)):
if list[min]>list[j]:
min=j
if i!=min:
list[i],list[min] = list[min],list[i]
return list
print selectsort([1,4,2,6,3,8])
快速排序:
演算法描述:1、先從序列中取出乙個數作為基準;
2、將比它大的放在右邊,比基準小的放在左邊;
3、再對左右區間重複第二步,直到各區間只有乙個數為止。
**實現:
from random import random
defquiksort
(list):
if len(list)>1:
qsort(list,0,len(list)-1)
defqsort
(list,start,end):
base=list[start]
pl=start
pr=end
while plwhile pland list[pr]>=base:
pr-=1
if pr==pl:
break
else:
list[pl],list[pr]=list[pr],list[pl]
while pland list[pl]<=base:
pl+=1
if pr==pl:
break
else:
list[pl], list[pr] = list[pr], list[pl]
if pl-1>start:
qsort(list,start,pl-1)
if pr+1
1,end)
r=random()
a=for i in range(20):
print a
quiksort(a)
print a
插入排序:
def insertsort(list):
for i in range(2,len(list)):
iflist[i]list[0]=list[i];
j=i-1
while
list[j]>list[0]:
list[j+1]=list[j]
j-=1
list[j+1]=list[0]
return
list
print insertsort([0,1,4,7,8,3,9,2])
排序演算法的學習
排序 將 無序 的序列調整為 有序 的序列。1.氣泡排序 從後往前 比較相鄰的元素,較大的放置後一位,在與之後的相比較,一次類推,到最後,最後乙個元素為最大的元素。然後迴圈,排出序列。public class bubblesort bobble intarray public static void...
學習排序演算法
把目前學習的排序演算法記下來,方便以後複習package sort 冒泡 public class sort sort a for int i 0 ia j 1 package sort 插入 public class insertsort insertsort a,a.length print a...
學習 排序演算法
模板題 洛谷p1177 模板 快速排序 首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數...