算法基础训练题(二)

C时间限制:1 毫秒 |  C内存限制:1 Kb

输入描述
多组测试数据。
首先输入一个整数N表示数组元素个数N
然后输入N个整数

输出描述
输出N个整数在一行,用空格隔开

输入样例
5 5 4 3 2 1

输出样例
1 2 3 4 5
代码如下//归并排序(mergesort),是创建在归并操作上的一种有效排序算法,效率为O(nlogn)。其方法主要是用二分法加递归,先将所有的数二分法拆开,递归,拆的只有两个数,然后再用合并法排序,先两个数内部排好序,然后在合并,两个两个排好序的数再排成一个排好序的4个数,按照这样的方法把数排好。最后合成一组有序的数。

#include <iostream>
using namespace std;

void Merge(int A[], int first, int mid, int last)
{
int temp[100];
int i = first, j = mid;
int k = 0;
while (i < mid && j < last)
if (A[i] < A[j])
temp[k++] = A[i++];
else
temp[k++] = A[j++];

while (i < mid)
temp[k++] = A[i++];
while (j < last)
temp[k++] = A[j++];

for (int v = 0; v < k; v++)
A[first + v] = temp[v];
}


void MergeSort(int A[], int first, int last)
{
if (first < last - 1)
{
      int mid=(first+last)/2;
      MergeSort(A,first,mid);   
      MergeSort(A,mid,last);   
      Merge(A,first,mid,last);   
}
}


int main()
{
int A[100];
int N;
while(cin >>N )
{
for(int i=0;i<N;i++)
{
cin >>A[i];
}

MergeSort(A,0,N);

for(int i=0;i<N-1;i++)
{
cout << A[i] << " ";
}
cout << A[N-1] << endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值