您的位置:首页 > 其它

【MergeSort】归并排序

2014-11-19 15:50 411 查看
归并排序的主要思想:递归成两部分分别排序,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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: