归并排序(分治)
经典的排序算法,经典的分治策略。
重点在于Merge函数对两部分已排序数组的合并。注意使用哨兵牌技巧。
1 /* 2 * 归并排序 3 */ 4 int helper_1[10005]; 5 int helper_2[10005]; 6 void merge(int arr[], int p, int q, int r) 7 { 8 int i = 0, j = 0; 9 for (i = p; i <= q; i++) 10 helper_1[i] = arr[i]; 11 for (j = q + 1; j <= r; j++) 12 helper_2[j] = arr[j]; 13 helper_1[q + 1] = INF; // 设置哨兵牌 14 helper_2[r + 1] = INF; // 设置哨兵牌 15 i = p; j = q + 1; // 指针设置为初始状态 16 for (int k = p; k <= r; k++) 17 { 18 if (helper_1[i] >= helper_2[j]) { 19 arr[k] = helper_2[j]; 20 j++; 21 } 22 else { 23 arr[k] = helper_1[i]; 24 i++; 25 } 26 } 27 } 28 // 归并排序 29 void mergeSort(int arr[], int p, int r) 30 { 31 if (p < r) { 32 int mid = (p + r) >> 1; 33 mergeSort(arr, p, mid); 34 mergeSort(arr, mid + 1, r); 35 merge(arr, p, mid, r); 36 } 37 } 38 int main() 39 { 40 int ar[20]; 41 srand((unsigned)time(nullptr)); 42 for (int i = 0; i <= 19; i++) 43 ar[i] = rand() % (10 - 1 + 1) + 1; 44 mergeSort(ar, 0, 19); 45 // 打印 46 for (int i = 0; i <= 19; i++) 47 cout << ar[i] << " "; 48 return 0; 49 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现