C語言小白歸併排序

2021-07-31 01:57:14 字數 792 閱讀 6526

歸併排序採用分治法,排序速度快,排序中不改變輸入順序

主要思路乙個陣列進行二分,再將左右分別進行二分直至只有乙個數(即有序),再合併陣列使其有序,完成排序

#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...