題目位址
思路:1.要區分插入排序和歸併排序,我們需要知道的是經過插入排序的前後兩個陣列的是有一段相同字尾的(除非你插入的是右邊最後乙個元素且改變了原位置,此時左邊都有序了,這種情況造成的前後改變歸併排序也可以做到),且前面是已經排好了序的.故我們從前面開始檢查排序後的陣列它的最長有序長度,並將第乙個無序的座標記錄下來作為下乙個可能的插入元素以便後續的下一步插入操作,再判斷此後的字尾是否與原陣列相同,相同則是經歷了插入排序.
2.區分過後,下乙個點就是進行下一步排序了,那麼插入排序好辦,我們利用前面記錄的有序的分界點,找到第乙個大於它的點的座標,將自此到它的位置的陣列整體右移插入就ok了,歸併排序的話,還是直接看**比較好.
#include
#include
#include
#include
#include
using
namespace std;
int* p1;
int*temp;
void
merge
(int p,
int n,
int l)
while
(l < mid)
temp[z++
]= p[l++];
while
(m < r)
temp[z++
]= p[m++];
for(
int o =
0; o < z; o++
) p[o + i]
= temp[o];}
delete
temp;
}int
main()
merge
(p1,n, m *2)
;printf
("merge sort\n");
}else
for(
int r =
0; r < n; r++
)delete
p;delete
p1;}
插入排序 歸併排序
插入排序 define len 5 int a len void insertion sort void int i,j,k for j 1 j len j k a j i j 1 while i 0 a i k a i 1 a i i a i 1 k 歸併排序 int a 8 void merge...
插入排序 歸併排序
演算法導論初涉,第一講練習內容 include define n 6 int a n void init 初始化陣列 a i 1 k void output int a,int n void merge int low,int mid,int high while s mid b i a s whi...
插入排序 歸併排序
一直沒自己寫過 然後自己寫了下 其實我主要查的wikipedia 插入排序 歸併排序 先插排 插入排序 英語 insertion sort 是一種簡單直觀的 排序演算法 它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序 在實現上,通常採用in ...