1.冒泡排序
2.快速排序
3.直接排序
4.堆排序
5.直接插入排序
6.希爾排序
7.歸併排序
8.計數排序
9.桶排序
10.基數排序
從頭學,一點一點補充。
冒泡排序
它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序(如從大到小、首字母從A到Z)錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素已經排序完成。 --百度百科
l = [42, 3, 5, 69, 9, 1, 4, 0, 0, 0, 100]
ll = len(l)
while ll > 0:
for i in range(0, ll-1):
if l[i] > l[i+1]:
l[i], l[i+1] = l[i+1], l[i]
else:
continue
ll = ll-1
print(l)
快速排序
通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。 --百度百科
def QuickSort(myList,start,end):
#判斷low是否小於high,如果爲false,直接返回
if start < end:
i, j = start, end
#設置基準數
base = myList[i]
while i < j:
#如果列表後邊的數,比基準數大或相等,則前移一位直到有比基準數小的數出現
while (i < j) and (myList[j] >= base):
j = j - 1
#如找到,則把第j個元素賦值給第個元素i,此時表中i,j個元素相等
myList[i] = myList[j]
#同樣的方式比較前半區
while (i < j) and (myList[i] <= base):
i = i + 1
myList[j] = myList[i]
#做完第一輪比較之後,列表被分成了兩個半區,並且i=j,需要將這個數設置回base
myList[i] = base
#遞歸前後半區
QuickSort(myList, start, i - 1)
QuickSort(myList, i + 1, end)
return myList
myList = [5, 10, 3, 7, 1, 3, 8, 6, 100]
print("Quick Sort: ")
QuickSort(myList, 0, len(myList)-1)
print(myList)
直接選擇排序
第一次從R[0]~R[n-1]中選取最小值,與R[0]交換,第二次從R[1]~R[n-1]中選取最小值,與R[1]交換,....,第i次從R[i-1]~R[n-1]中選取最小值,與R[i-1]交換,.....,第n-1次從R[n-2]~R[n-1]中選取最小值,與R[n-2]交換,總共通過n-1次,得到一個按排序碼從小到大排列的有序序列。 --百度百科
def SelectionSort(arr):
for i in range(len(arr)):
min = i
for j in range(i + 1, len(arr)):
if arr[j] < arr[min]:
min = j
arr[i], arr[min] = arr[min], arr[i]
return arr
arr = [49, 38, 65, 97, 26, 13, 27, 49, 55, 4]
print(SelectionSort(arr))
桶排序
將數組分到有限數量的桶子裏。每個桶子再個別排序(有可能再使用別的排序算法或是以遞歸方式繼續使用桶排序進行排序) --百度百科
#簡單的桶排序從大到小輸出:簡單、浪費空間、不支持小數、負數
#對0-10之間的數字進行排序
#利用一維數組tong_ary[],數組初始化爲0
#如果輸入5,則數組索引爲5的地方加1
tong_ary=[0,0,0,0,0,0,0,0,0,0,0]
for i in range(0,11):
n=int(input("請輸入數:"))
tong_ary[n]=tong_ary[n]+1
for j in range(10,-1,-1):
while tong_ary[j] > 0:
print(j,end=' ')
tong_ary[j]=tong_ary[j] - 1
#去重後從小到大輸出:
#for j in range(0,11):
# if tong_ary[j] > 0:
# print(j,end=' ')