釋放雙眼,帶上耳機,聽聽看~!
所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序演算法,就是如何使得記錄按照要求排列的方法。
氣泡排序
基本思想
兩個數比較大小,較大的數下沉,較小的數冒起來。
演算法描述
比較相鄰的元素。如果第乙個比第二個大,就交換它們兩個;
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數;
針對所有的元素重複以上的步驟,除了最後乙個;
重複步驟1~3,直到排序完成。
動態演示
**實現
def bubble_sort(alist):
n = len(alist)
for i in range(n-1):
for j in range(n-i-1):
if alist[j] > alist[j+1]:
alist[j],alist[j+1] = alist[j+1],alist[j]
選擇排序
基本思想
在長度為n的無序陣列中,第一次遍歷n-1個數,找到最小的數值與第乙個元素交換;
第二次遍歷n-2個數,找到最小的數值與第二個元素交換;
第n-1次遍歷,找到最小的數值與第n-1個元素交換,排序完成。
動態演示
**實現
def select_sort(alist):
n = len(alist)
for i in range(n-1):
min = i
for j in range(i+1,n-1):
if alist[min]>alist[j]:
min = j
alist[i],alist[min] = alist[min],alist[i]
插入排序
基本思想
在要排序的一組數中,假定前n-1個數已經排好序,現在將第n個數插到前面的有序數列中,使得這n個數也是排好順序的。如此反覆迴圈,直到全部排好順序。
動態演示
**實現
def insert_sort(alist):
n = len(alist)
for i in range(n-1):
j = i
while j>0:
if alist[j] < alist[j-1]:
alist[j-1],alist[j]=alist[j],alist[j-1]
else:
break
j-=1
快速排序
基本思想
先從數列中取出乙個數作為key值;
將比這個數小的數全部放在它的左邊,大於或等於它的數全部放在它的右邊;
對左右兩個小數列重複第二步,直至各區間只有1個數。
動態演示
**實現
def quick_sort(alist,start,end):
if start>=end:
return
mid = alist[start]
low = start
high = end
while low
while low mid:
high-=1
alist[low] = alist[high]
while low
low+=1
alist[high]=alist[low]
alist[low] = mid
quick_sort(alist,start,low-1)
quick_sort(alist,low+1,end)
歸併排序
基本思想
首先考慮下如何將2個有序數列合併。這個非常簡單,只要從比較2個數列的第乙個數,誰小就先取誰,取了後就在對應數列中刪除這個數。然後再進行比較,如果有數列為空,那直接將另乙個數列的資料依次取出即可。
動態演示
**實現
def merg_sort(alist):
n = len(alist)
if n<=1:
return alist
mid = n//2
left_array = merg_sort(alist[0:mid])
right_array = merg_sort(alist[mid:])
reult=
left_point,right_point=0,0
while left_point
if left_array[left_point] > right_array[right_point]:
right_point+=1
else:
left_point+=1
reult.extend(left_array[left_point:])
reult.extend(right_array[right_point:])
return reult
五大排序 演算法
插入排序 1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort nodel,int length int i,j...
八大排序(簡化為五大)
排序的功能 使用者提出要求,電腦根據使用者要求把那些記錄排列出來,給使用者帶來放方便。排序的基本操作 1 比較關鍵字的大小 2 將記錄從乙個位置移動到另乙個位置。理解 基本 一詞。後面詳講關鍵字。內部排序 要排序的資料都在記憶體中,稱為內部排序。五大排序都是內部排序。外部排序 要排序的資料一部分在記...
Python八大排序(五) 快速排序
如下 5.快速排序 交換排序 思想 先找乙個虛擬的中間值,按此中間值將所有資料分為兩部分,小於中間值的資料放在左邊大於中間值的放在右邊,在以同樣的方式處理 左右兩邊的資料直到排完序為止。def quick sort num list if len num list 2 return num list...