#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<stack>
#include<queue>
#include<map>
using namespace std;
typedef long long LL;
#define INF 10000
//插入排序
void insertionSort(int a[],int n)
{
int k;
//后与前比较,前为有序,后为无序
for(int i=1; i<n; i++)
{
for(int j=i-1; j>=0; j--)
{
if(a[j]>a[j+1])
{
k=a[j+1];
a[j+1]=a[j];
a[j]=k;
}
}
}
}
//归并排序
void mergeArray(int a[],int temp[],int first,int mid,int last)
{
//合并数组
int i=first;
int 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[i++];
}
//将排好序的部分加入原数组
for(i=0; i<k; i++)
{
a[first+i]=temp[i];
}
}
void mergeSort(int a[],int temp[],int first,int last)
{
if(first<last)
{
int mid=(first+last)/2;
mergeSort(a,temp,first,mid);
mergeSort(a,temp,mid+1,last);
mergeArray(a,temp,first,mid,last);
}
}
bool MergeSort(int a[],int n)
{
int *p=new int[n];
if(p==NULL)
{
return false;
}
mergeSort(a,p,0,n-1);
delete[] p;
return true;
}
int main()
{
int a[INF];
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0; i<n; i++)
{
cin>>a[i];
}
//MergeSort(a,n);
insertionSort(a,n);
for(int i=0; i<n; i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
}
return 0;
}
插入排序and归并排序
最新推荐文章于 2023-12-05 07:49:10 发布