快排归并梳理
2021/7/13 6:06:23
本文主要是介绍快排归并梳理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
AcWing 785. 快速排序
#include <iostream> #include <cstdio> using namespace std; const int N = 100010; int a[N]; void quick_sort(int a[],int l,int r) { if(l >= r) return; int i = l - 1, j = r + 1,x = a[(i+j) >> 1]; while(i < j) { do i ++; while(a[i] < x); do j --; while(a[j] > x); if(i< j) swap(a[i],a[j]); } quick_sort(a,l,j); quick_sort(a,j + 1,r); } int main(void) { int n; scanf("%d",&n); for(int i = 0 ; i < n; i ++) scanf("%d",&a[i]); quick_sort(a,0,n - 1); for(int i = 0 ; i < n; i ++) printf("%d ",a[i]); return 0; }
每次将在边界范围内数字,以一个基准数为标准,小于基准数的放左侧,大于基准数的放右侧,然后递归的对小区间做相同处理
AcWing 787. 归并排序
#include<stdio.h> #define N 100010 int a[N],tmp[N]; void merge_sort(int a[],int l ,int r) { int mid = (l + r)>>1; if (l >= r) return; merge_sort(a,l,mid); merge_sort(a,mid+1,r); int s = 0,i = l, j = mid + 1; while (i <= mid && j <= r) { if(a[i] <= a[j]) tmp[s ++] = a[i ++]; else tmp[s ++] = a[j ++]; } while (i <= mid) tmp[s ++] = a[i ++]; while (j <= r) tmp[s ++] = a[j ++]; for (int k = l,t = 0; k <= r ; k ++,t ++) a[k] = tmp[t]; } int main(void) { int n; scanf("%d",&n); for(int i = 0 ; i < n ; i ++) scanf("%d",&a[i]); merge_sort(a, 0, n-1); for( int i = 0 ; i < n ; i++) printf("%d ",a[i]); return 0; }
需要额外的空间用于存储temp数组.
将每个小区间排序,再合并区间,最后得到的就是有序数列
这篇关于快排归并梳理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?