夜深人靜寫演算法 合併排序(分治,非遞迴排序)

2021-08-29 10:24:22 字數 848 閱讀 7896

合併排序(非遞迴排序):

首先將陣列a中相鄰元素兩兩配對,用合併演算法將他們排序,構成 n/2 組長度為 2 的排好序的子陣列段,然後再將它們排序成長度為4的排好序的子陣列段,如此繼續下去,直至整個陣列排好序。

程式如下:

#include#include #include #define max 100

using namespace std;

template void merge(type a,int l,int m,int r)

while(str1 <= m)

b[length++] = a[str1++];

while(str2 <= r)

b[length++] = a[str2++];

for(int i = 0;i < length;i++)

a[l + i] = b[i]; //複製回陣列a

}template void mergepass(type a,int s,int n)

if(i + s < n) //剩餘的不足2s的時候 如果剩下的大於s時,進行合併

merge(a , i, i + s - 1 ,n-1);

//如果剩下的不足s時,預設不做處理

}template void mergesort(type a,int n)

}int main();

for(int i = 0; i <10 ; i++)

mergesort(a,10);

cout<

for(int i = 0; i <10 ; i++)

}

夜深人靜寫演算法 快速排序(分治)

快速排序 採用分治的方法 一 1 將陣列的第乙個作為參考值,將所有小於該值的數移動到改值左側,將所有大於該值的數移動到陣列右側 利用兩個指標分別從陣列的首尾開始向中間掃瞄 2 將參考值的左側和右側看作新的兩個陣列 3 重新從 1 開始,直到陣列的大小為0 二 如圖為第一次遞迴,將小於23的移到左側,...

夜深人靜寫演算法 排列問題 分治)

採用分治法,把乙個字串看成兩部分 第一部分是它的第乙個字元,第二部分是後面的所有字元。這樣字串的全排列就變成了第二部分的全排列,前提是要將第乙個字元的情況全部列舉出來。1 首先求所有可能出現在第乙個位置的字元,也就是把第乙個字元和後面的所有字元交換 2 然後在把後面的字串看成新的字串從 1 如果最後...

夜深人靜寫演算法(十二) 凸包

三 graham 掃瞄法 四 凸包的應用 人生當中成功只是一時的,失敗卻是主旋律,但是如何面對失敗,就把人分成了三六九等。有的人會被失敗擊垮,一蹶不振 有的人卻能夠直面失敗,迎難而上。這個世上只有一種英雄主義,那就是 認清生活的真相,並且仍然熱愛它!難道向上攀爬的這條路不是比站在頂峰更讓人熱血澎湃嗎...