归并排序
来源:互联网 发布:淘宝假链接是如何制作 编辑:程序博客网 时间:2024/06/03 03:57
#include<cstring>
#include<cstdio>
#include<algorithm>
#include <iostream>
#include<queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
const int inf = 0x3f3f3f3f;
const int MAXN=1005;
const int mod = 10007;
typedef long long LL;
using namespace std;
void mergearray(int a[], int first, int mid, int last, int temp[])//数组合并
{
int i = first, j = mid + 1;
int m = mid, n = last;
int k = 0;
while (i <= m && j <= n)
{
if (a[i] <= a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}
while (i <= m)
temp[k++] = a[i++];
while (j <= n)
temp[k++] = a[j++];
for (i = 0; i < k; i++)
a[first + i] = temp[i];
}
void mergesort(int a[], int first, int last, int temp[])//排序
{
if (first < last)
{
int mid = (first + last) / 2;
mergesort(a, first, mid, temp); //左边有序
mergesort(a, mid + 1, last, temp); //右边有序
mergearray(a, first, mid, last, temp); //再将二个有序数列合并
}
}
bool MergeSort(int a[], int n)
{
int *p = new int[n];
if (p == NULL)
return false;
mergesort(a, 0, n - 1, p);
delete[] p;
return true;
}
int main()
{
int n, a[1005];
scanf("%d", &n);
for(int i=0;i<n;++i)
scanf("%d", &a[i]);
if(MergeSort(a, n))
{
for(int i=0;i<n;++i)
printf("%d ", a[i]);
}
return 0;
}
#include<cstdio>
#include<algorithm>
#include <iostream>
#include<queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
const int inf = 0x3f3f3f3f;
const int MAXN=1005;
const int mod = 10007;
typedef long long LL;
using namespace std;
void mergearray(int a[], int first, int mid, int last, int temp[])//数组合并
{
int i = first, j = mid + 1;
int m = mid, n = last;
int k = 0;
while (i <= m && j <= n)
{
if (a[i] <= a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}
while (i <= m)
temp[k++] = a[i++];
while (j <= n)
temp[k++] = a[j++];
for (i = 0; i < k; i++)
a[first + i] = temp[i];
}
void mergesort(int a[], int first, int last, int temp[])//排序
{
if (first < last)
{
int mid = (first + last) / 2;
mergesort(a, first, mid, temp); //左边有序
mergesort(a, mid + 1, last, temp); //右边有序
mergearray(a, first, mid, last, temp); //再将二个有序数列合并
}
}
bool MergeSort(int a[], int n)
{
int *p = new int[n];
if (p == NULL)
return false;
mergesort(a, 0, n - 1, p);
delete[] p;
return true;
}
int main()
{
int n, a[1005];
scanf("%d", &n);
for(int i=0;i<n;++i)
scanf("%d", &a[i]);
if(MergeSort(a, n))
{
for(int i=0;i<n;++i)
printf("%d ", a[i]);
}
return 0;
}
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- js事件代理
- canny算法代码实现
- Java基础之加解密(三) SHA安全散列算法
- 常用sql语句
- codeforces round 404 div2 D Anton and School
- 归并排序
- 剪刀*石头*布
- Java中的异常处理
- 小教训
- Activity 的启动模式
- JavaScript的Array类型总结
- logstash5.x 快速上手教程
- STL-<algorithm>常用函数
- centos6.X 下安装python3.5