陣列的歸併排序

2021-07-05 19:59:38 字數 1036 閱讀 9909

歸併排序:利用遞迴與分治的思想,先將陣列對半劃分,再對半劃分的陣列排序,從而使左右兩個子陣列各自有序,最後再將兩排序號的子陣列進行歸併成乙個大的有序陣列。

具體**如下:

#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個有序的.自下向上不斷往上歸併直到有序 自然合併排序是合併排序演算法的一種改進.自然合併排序 ...