排序演算法的學習

2021-07-11 23:08:03 字數 1988 閱讀 1898

氣泡排序:是一種交換排序,它的基本思想是:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。最好的情況下 ,時間複雜度是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 模板 快速排序 首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數...