归并排序—>分治
背景
归并排序是十大排序之一
十大排序:
归并原理与过程
原理:
取中值,将数组分成左右部分,分别对两边再次分成两个部分,一直到最终一边只有两个数,如何进行双指针从两端进行判定,若左端,比右端大,则交换两个位置的值。
过程
首先取数组中值,进行左右两边归并排序,调用递归。然后运用双指针算法(若不会,请看快速排序有讲解)判断两端的值,在适合条件下进行交换。最后完成所有区间的排序。
图形展示
最后,将所有区间的值进行排序合并
2 1 排序
2 1 4 排序
3 5 排序
2 1 4 3 5 排序
模板代码
int mid = r + l >>1;
mergeSort(q , l , mid );
mergeSort(q , mid + 1 , r);
//合并,取k 值
int k = 0 ,i = l , j = mid + 1;
while (i <= mid && j <= r) {
if (q[i] <= q[j]) tem[k++] = q[i++];
else tem[k++] = q[j++];
}
while(j <= r) tem[k++] = q[j++