時間複雜度o(nlgn)
分治模式的一般步驟:
分解(divide):將原問題分解成一些列子問題;
解決(conquer):遞迴地解各子問題,若子問題足夠小,則直接求解;
合併(combine):將子問題的結果合併成原問題的解。
以下是分治排序的python實現:
def merge(p_list,p_start,p_mid,p_end):
left_list = p_list[p_start:p_mid+1];
right_list = p_list[p_mid+1:p_end+1];
left_index = right_index = 0;
for i in xrange(p_start,p_end+1):
if left_index >= len(left_list) or right_index >= len(right_list):
break;
if left_list[left_index] <= right_list[right_index]:
p_list[i] = left_list[left_index];
left_index += 1;
else:
p_list[i] = right_list[right_index];
right_index += 1;
if left_index >= len(left_list):
p_list[i:p_end+1] = right_list[right_index:len(right_list)];
else:
p_list[i:p_end+1] = left_list[left_index:len(left_list)];
def merge_sort(p_list,p_start,p_end):
if p_start < p_end:
mid = (p_start + p_end) >> 1;
merge_sort(p_list,p_start,mid);
merge_sort(p_list,mid+1,p_end);
merge(p_list,p_start,mid,p_end);
enjoy it.
分治演算法(排序的實現)
分治排序演算法中能夠使兩個已經排好序的陣列重新以從小到大的順序進行排序,實現上述功能 需要用到兩個函式1.合併 merge 函式,將兩個有序陣列合併成乙個陣列 2.分治排序函式 但是如果乙個陣列中是排序是無序的怎麼實現分治排序,此時就要用到分治演算法的思想 遞迴 通過遞迴將無序的陣列分隔 當分隔的陣...
分治排序的Python實現
大二開學開始讀演算法導論同時又在自學python,想把一些厲害的演算法都用python自己寫一遍 以下是分治排序的python實現 隨機產生一萬個1000以內的數字然後排序 設想有兩副排序好的撲克牌將他們合併成排序好的一副牌總數為n,只需要將牌頂的派比較然後根據從大到小或者從小到大放到手中即可,這樣...
分治法實現歸併排序演算法(python實現)
給定任意幾組資料,利用分治法的思想,將資料進行排序並將排好的資料進行輸出。利用分治法,將乙個陣列元素大於 2 的陣列分成兩個子陣列,然後對每乙個子陣列遞迴呼叫,直到最下的子陣列的元素個數為 1,此時子陣列就不用進行排序了,再往上回溯,依據每個子陣列中的元素大小對子陣列進行合併,依次進行下去,最後返回...