非递归实现归并排序是一种迭代式的排序算法,它避免了递归调用带来的额外开销,通常使用循环和迭代来实现归并排序的过程: 确定归并区间的思路:对于给定的数组,首先将相邻的元素两两归并(gap=1),然后将归并的区间长度不断扩大,依次归并相邻的区间、长度为 2 的区间、长度为 4 的区间,直到整个数组都归并完成(gap=2)。
//归并排序的非递归void MergeSortNonR(int* a, int sz){int* tmp = (int*)malloc(sizeof(int) *sz);int gap = 1; // 每组数据个数while (gap < sz){for (int i = 0; i < sz; i += 2 * gap){// [i, i+gap-1] [i+gap,i+2*gap-1]int begin1 = i, end1 = i + gap -...
1/**2* Merge_Sort: 归并排序的递归实现3* 注:算法导论上给出的合并排序算法4* 递归过程是将待排序集合一分为二,5* 直至排序集合就剩下一个元素为止,然后不断的合并两个排好序的数组6* T(n) = O(nlgn)7**/8#include <stdio.h>9#defineLEN 81011//合并12voidmerge(inta[],intstart,intmid,intend...