合并排序问题
来源:互联网 发布:网页php的编程代码大全 编辑:程序博客网 时间:2024/06/06 01:27
题目:
对n个元素组成的序列进行排序。
基本思想:将待排序元素分成大小大致相同的两个子集合,分别对两个集合进行排序,最终将排序好的子集合合并成所要求的排好序的集合。
代码:
#include <bits/stdc++.h>using namespace std;void Copy(int *a,int *b,int left,int right){ for(int i=left; i<=right; i++) a[i]=b[i];}void Merge(int *a,int *b,int left,int mid,int right){ int i=left,j=mid+1,k=left;//a[left:mid] && a[mid+1:right] --> b[left:right] while(i<=mid&&j<=right) { if(a[i]<=a[j]) b[k++]=a[i++]; else b[k++]=a[j++]; } if(i<=mid) for(int q=i; q<=mid; q++) b[k++]=a[q]; else for(int q=j; q<=right; q++) b[k++]=a[q];}void MergeSort(int *a, int left, int right){ int i; int b[100]; if(left<right) //至少有2个元素 { i=(left+right)/2; //取中点 MergeSort(a,left,i); MergeSort(a,i+1,right); Merge(a,b,left,i,right); //合并到数组b Copy(a,b,left,right); //复制回数组a }}int main(){ int n; int a[100]; while(~scanf("%d",&n)) { for(int i=1; i<=n; i++) scanf("%d",&a[i]); MergeSort(a,1,n); for(int i=1; i<=n; i++) printf("%d ",a[i]); printf("\n"); } return 0;}
阅读全文
0 0
- 合并排序问题
- 蓝桥杯中的合并排序问题
- 动态规划合并排序问题
- 合并排序中分段递归问题
- 分治策略之合并排序问题
- LeetCode --两个排序数组合并问题
- 有合并单元格时的排序问题
- 合并排序
- 合并排序
- 合并排序
- 合并排序
- 合并排序
- 合并排序
- 合并排序
- 合并排序
- 合并排序
- 合并排序
- 合并排序
- hadoop资源隔离
- 【Nginx-反向代理服务器】实践篇(三)之Tomcat+Nginx搭建集群
- Spark MLlib(上)--机器学习及SparkMLlib简介
- 阿里巴巴代码规范
- PD4ML Cookbook Getting Started(1)
- 合并排序问题
- Python中的for循环控制语句-常见误区
- [bzoj-1607][Usaco2008 Dec]Patting Heads 轻拍牛头 题解
- SAP关于smartforms报表
- 实现String工具类(动态参数)
- ue4 动画相关方法杂记
- 要执行请求的操作,WordPress需要访问您网页服务器的权限问题
- 集合最大元问题
- mysql数据库优化之索引优化