歸并排序的基本思路:
- merge函數將兩個有序數列歸并到一個有序數列中
- 根據分治法,利用遞歸,不斷歸并有序數列
- 遞歸最終的單元操作為:將兩個分別只含有一個元素的有序數列歸并為一個數列
#include <iostream>
using namespace std;
void merge(int *input, int start, int mid, int end, int *temp) {
int k = 0;
int leftNum = mid;
int rightNum = end;
int i = start;
int j = mid + 1;
while (i <= leftNum && j <= rightNum) {
if (input[i] < input[j]) {
temp[k++] = input[i++];
} else {
temp[k++] = input[j++];
}
}
while (i <= leftNum) {
temp[k++] = input[i++];
}
while (j <= rightNum) {
temp[k++] = input[j++];
}
for (i = 0; i < k; i++) {
input[start + i] = temp[i];
}
}
void mergeSort(int *input, int start, int end, int *temp) {
if (start < end) {
int mid = (start + end) / 2.;
mergeSort(input, start, mid, temp);
mergeSort(input, mid + 1, end, temp);
merge(input, start, mid, end, temp);
}
}
int main() {
int a[] = {3,5,6,2,1,9,8};
int p[7];
mergeSort(a, 0, 6, p);
for (int i = 0; i < 7; i++) {
cout<<a[i];
}
cout<<endl;
return 0;
}
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。