归并排序的主要思想:递归成两部分分别排序,hi <= lo 时,返回;
#include <cstdio>
#include <cstring>
const int maxn = 1e5 + 5;
char a[maxn], aux[maxn];
void merge(char *array, int lo, int mid, int hi)
{
int i = lo, j = mid+1;
for(int k = lo; k <= hi; k++)
aux[k] = array[k];
for(int k = lo; k <= hi; k++){
if(i > mid)
array[k] = aux[j++];
else if(j > hi)
array[k] = aux[i++];
else if(aux[j] < aux[i])
array[k] = aux[j++];
else
array[k] = aux[i++];
}
}
void mergesort(char *s, int lo, int hi)
{
if(hi <= lo)
return;
int mid = lo + (hi-lo)/2;
mergesort(s, lo, mid);
mergesort(s, mid+1, hi);
merge(s, lo, mid, hi);
}
void show()
{
printf("%s\n", a);
}
int main()
{
scanf("%s", a);
int lo = 0, hi = strlen(a) - 1;
mergesort(a, lo, hi);
show();
return 0;
}