部落格**是博主想複習下排序演算法然後手打的,已經過除錯。若還有錯誤請指出!
該演算法採用經典的分治(divide-and-conquer)策略(分治法將問題分(divide)成一些小的問題然後遞迴求解,
而治(conquer)的階段則將分的階段得到的各答案"修補"在一起,即分而治之)。
分階段可以理解為就是遞迴拆分子序列的過程,遞迴深度為logn
平均 最壞 最好 空間 穩定性 複雜性
o(nlogn) o(nlogn) o(nlogn) o(n) 穩定 較複雜
對於氣泡排序和選擇排序,每一趟都能確定乙個元素的最終位置
歸併排序,第一趟排序結束都可以得到若干個有序子串行,而此時的序列中並沒有兩兩元素有序排列。
插入排序在每趟排序後能確定前面的若干元素是有序的,而此時第二趟排序後,序列的前三個元素是有序的,符合其特徵。
在歸併排序中,相等的元素的順序不會改變,所以它是穩定的演算法。
def merge(left_list, right_list):
left = 0
right = 0
result =
while left < len(left_list) and right < len(right_list):
if left_list[left] <= right_list[right]:
left += 1
else:
right += 1
result += left_list[left:]
result += right_list[right:]
return result
def merge_sort(input_list):
if len(input_list) <= 1:
return input_list
mid = len(input_list) // 2
left_list = merge_sort(input_list[:mid])
right_list = merge_sort(input_list[mid:])
return merge(left_list, right_list)
'''
八大排序演算法python實現
1.氣泡排序 氣泡排序重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢 浮 到數列的頂端,故名。步驟 比較相鄰的元素。如果第乙個比第二個大,就交...
八大排序演算法
1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length void shell ...
八大排序演算法
一 概述 八大排序演算法包括 1 插入排序之直接插入排序 straight insertion sort 2 插入排序之希爾排序 shells sort 3 選擇排序之簡單選擇排序 selection sort 4 選擇排序之堆排序 heap sort 5 交換排序之氣泡排序 bubble sort...