#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
using namespace std;
const int n=10;
void maopao(const int a[]) //O(n^2)
{
int b[n];
memcpy(b,a,n*sizeof(int));
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(b[j]>b[j+1])
swap(b[j],b[j+1]);
}
}
for(int i=0;i<n;i++)
printf("%d ",b[i]);
printf("\n");
}
void insertion_sort(const int a[]) //O(n^2)
{
int b[n];
memcpy(b,a,n*sizeof(int));
for(int i=1;i<n;i++)
{
int key=b[i];
int j=0;
while(j<i && b[j]<=key)
j++;
if(j<i)
{
int k=i;
while(k>j)
{
b[k]=b[k-1];
k--;
}
b[j]=key;
}
}
for(int i=0;i<n;i++)
printf("%d ",b[i]);
printf("\n");
}
void Merge(int l,int mid,int r,int b[])
{
int c[n];
int i=l,j=mid+1,k=l;
while(k<=r)
{
if(i>mid) c[k++]=b[j++];
else if (j>r) c[k++]=b[i++];
else if(b[i]<=b[j]) c[k++]=b[i++];
else c[k++]=b[j++];
}
for(i=l;i<=r;i++)
b[i]=c[i];
}
void Mergesort(int l,int r,int b[])
{
if(l<r)
{
int mid=(l+r)/2;
Mergesort(l,mid,b);
Mergesort(mid+1,r,b);
Merge(l,mid,r,b);
}
}
void merge_sort(const int a[]) //O(nlogn)
{
int b[n];
memcpy(b,a,n*sizeof(int));
Mergesort(0,n-1,b);
for(int i=0;i<n;i++)
printf("%d ",b[i]);
printf("\n");
}
int a[]={10,9,8,7,6,5,4,3,2,1};
int main()
{
maopao(a);
insertion_sort(a);
merge_sort(a);
return 0;
}