歸併排序:利用遞迴與分治的思想,先將陣列對半劃分,再對半劃分的陣列排序,從而使左右兩個子陣列各自有序,最後再將兩排序號的子陣列進行歸併成乙個大的有序陣列。
具體**如下:
#include #include using namespace std;
void mergesort(vector&arr, int start, int end);
void merge(vector&arr, int start1, int end1, int start2, int end2);
// 陣列歸併排序
void mergesort(vector&arr, int start, int end)
}// 將兩個有序陣列合併為乙個有序陣列
void merge(vector&arr, int start1, int end1, int start2, int end2)
for (int i = 0; i < len2; i++)
int pos = start1;
// 合併兩個有序陣列
int i = 0;
int j = 0;
while (i < len1 && j < len2)
else
}if (i < len1) }
if (j < len2) }
}// 順序列印陣列
void printarray(vector&arr)
cout << endl;
}int main()
printf("排序前的陣列為:");
printarray(array);
mergesort(array,0,array.size() - 1);
printf("排序後的陣列為:");
printarray(array);
return 0;
}
執行結果如下:
陣列歸併排序
include include using namespace std void print int a 歸併排序 思路 1 歸併排序 條件 小下標小,大下標大 分別對左半段和右半段進行歸併排序,然後合併 2 合併 把當前待排序列複製乙份 原來的陣列放排好序的元素 分兩段,依次比較左半段和右半段的元...
歸併排序以及歸併排序的優化
1 歸併排序的實現 歸併排序也利用了分治法的思想,首先將序列分成左右兩部分,將左右兩部分分別排序,然後將有序的兩個子串行進行合併 即merge操作 程式是遞迴進行的,主函式實現如下 歸併排序主函式 void merge sort int a,int first,int last else while...
歸併排序的優化 自然歸併排序
不知道怎麼將這個演算法思想表達的更好,也不知道自己的理解的是否對 黑體的注釋是普通的自然歸併,從相鄰長度為1的子陣列段進行合併也就是一開始將每兩個相鄰元素進行歸併,然後再相鄰四個元素左右兩組都有序的合併成4個有序的.自下向上不斷往上歸併直到有序 自然合併排序是合併排序演算法的一種改進.自然合併排序 ...