歸併排序(遞迴版本)C實現

2021-08-06 02:56:55 字數 860 閱讀 4953

歸併原理:

第一步:申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列

第二步:設定兩個指標,最初位置分別為兩個已經排序序列的起始位置

重複步驟3直到某一指標超出序列尾

將另一串行剩下的所有元素直接複製到合併序列尾

實現:

#include#includevoid merge(int a, int tmp, int left, int right, int r_end)

else

} while(left <= l_end)

while(right <= r_end)

int i;

for(i = 0; i < element_num; i++, r_end-- )

} // a[r_end--] = tmp[r_end--]; 錯誤 此處 r_end減了兩次

// a[--tmp_pos] = tmp[r_end--] 此種用法要注意 最後的tmp_pos指向末尾元素下一位置

void m_sort(int a, int tmp, int left, int r_end)

}void merge_sort(int a, int n)

m_sort(a, tmp, 0, n-1);

free(tmp);

} int main()

; int n = sizeof(a)/sizeof(a[0]);

merge_sort(a, n);

int i;

for(i = 0; i < n; i++ )

return 0;

}

C 歸併排序 遞迴實現

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法的乙個非常典型的應用。歸併排序中最重要的操作是如何將將二個有序數列合併。原理是比較兩個數列的第乙個數,誰小就先取誰,再繼續比較下乙個。迴圈完了後,如果有數列為空,那直接將另乙個數列的資料依次取出即可。將有序陣列a和b合併到c中 v...

C 實現歸併排序 遞迴

今天學習第乙個時間複雜度為o nlogn 的排序演算法 歸併排序。首先給出定義 歸併 一詞的中文含義就是合併,併入的意思,而在資料結構中的定義是將兩個或者兩個以上的有序陣列組合成乙個新的有序表。歸併排序 merging sort 原理 假設初始序列含n個記錄,則可以看成是n個有序的子串行,每個子串行...

歸併排序遞迴實現

include include define length 10 using namespace std void merge int ar,int br,int start,int mid,int end else if i mid else void copy int ar,int br,int...