陣列排序任務可以如下完成:
(1):將前一半排好序
(2):將後一半排好序
(3):把兩半歸併到乙個新的有序陣列中,然後再拷貝回原來的陣列,排序完成
利用遞迴思想將陣列一直劃分為要排序的另一半,最後就回將問題化簡為相鄰兩個數的排序,然後將排好序的陣列歸併到乙個陣列中,然後繼續向上遞迴直至排序完成。
int a[10]=;
將排好序的陣列先儲存在b陣列中,然後將b陣列中的數字按順序放入a陣列中。
int b[10];
int main()
cout << endl;
return 0;
}將兩個排好序的陣列歸併到乙個陣列中
void merge(int a, int s, int m, int e, int tmp)
else }
while(p1 <= m)
while(p2 <= e)
for(int i = 0; i < e - s + 1; i++)
}void mergesort(int a, int s, int e, int tmp) }
歸併排序演算法 遞迴法
首先乙個問題,如何將兩個整數進行公升序排序?這不簡單嗎。將兩個數比較,再將小的放在前面,大的放在後面。然後如何將兩個公升序的陣列排序為乙個陣列呢?我知道我知道 建立第三個陣列,將需要那兩個陣列按下標順序進行比較,然後將小的數放入第三個陣列中,在將兩者下標加一。如,將a陣列與b陣列的第乙個元素比較,假...
歸併排序(遞迴 非遞迴 自然歸併排序)
演算法思想 歸併排序是分治法的典型應用,其思想是不斷地將兩個有序的陣列合併為乙個有序陣列。遞迴實現 include void merge int a,int left,int m,int right void mergesortaux int a,int left,int right void me...
歸併排序 遞迴
歸併排序 採用分治法 divide and conquer 分治法將問題分 divide 成一些小的問題然後遞迴求解,而治 conquer 的階段則將分的階段得到的各答案 修補 在一起,即分而治之 遞迴 合併即為歸併 歸併的應用 求逆序對 只需在合併函式中稍加改動 void mergearray i...