歸併排序採用分治法,排序速度快,排序中不改變輸入順序
主要思路乙個陣列進行二分,再將左右分別進行二分直至只有乙個數(即有序),再合併陣列使其有序,完成排序
#include
#include
void merge(int sourcearr,int temparr, int startindex, int midindex, int endindex)
while(i != midindex+1) //將較長陣列剩餘部分貼上
temparr[k++] = sourcearr[i++];
while(j != endindex+1)
temparr[k++] = sourcearr[j++];
for(i=startindex; i<=endindex; i++) //返回已合併的陣列
sourcearr[i] = temparr[i];
}void mergesort(int sourcearr, int temparr, int startindex, int endindex)
}int main(int argc, char * argv)
; int i, b[8];
mergesort(a, b, 0, 7);
for(i=0; i<8; i++)
printf("%d ", a[i]);
printf("\n");
return
0;}
歸併排序 C語言
今天寫的是歸併排序,歸併排序的定義為 依次將每兩個相鄰的有序表合併成乙個有序表的排序方法。最經常使用的歸併方法是2 路歸併。假設初始序列含有n個記錄,則可看成是n個有序的子串行,每個子串行的長度為1,然後兩兩歸併,得到 n 2 個長度為2或1的有序子串行 再兩兩歸併,如此重複,直至得到乙個長度為n的...
小白排序之歸併排序
白話經典演算法系列之五 歸併排序的實現 歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。首先考慮下如何將將二個有序數列合併。這個非常簡單,只要從比較二個數列的第乙個數,誰小就先取誰,取了後就在對應數列中刪除這個數。然...
C語言歸併排序
描述 給定乙個數列,用歸併排序演算法把它排成公升序。輸入 第一行是乙個整數n n不大於10000 表示要排序的數的個數 下面一行是用空格隔開的n個整數。輸出 輸出排序後的數列,每個數字佔一行。歸併排序有兩個關鍵點 1.將兩個已經排好序的序列進行合併。歸併2個有序序列為1個有序序列 void merg...