我的c\c++之旅(二)——归并排序

来源:互联网 发布:学唇语软件 编辑:程序博客网 时间:2024/05/17 08:49

归并排序

/* without malloc error check */void Merge(int *sequence, int *tmpsequence, int leftbegin, int center, int rightend){    int i, recordleft, leftend, rightbegin;    i = recordleft = leftbegin;leftend = center;    rightbegin = center + 1;    while(leftbegin <= leftend && rightbegin <= rightend) {        if(sequence[leftbegin] < sequence[rightbegin])            tmpsequence[i++] = sequence[leftbegin++];        else            tmpsequence[i++] = sequence[rightbegin++];    }    while(leftbegin <= leftend)tmpsequence[i++] = sequence[leftbegin++];    while(rightbegin <= rightend)tmpsequence[i++] = sequence[rightbegin++];    for(i = recordleft; i <= rightend; i++)sequence[i] = tmpsequence[i];}void MSort(int *sequence, int *tmpsequence, int left, int right){int center;    if(left < right) {        center = (left + right) / 2;        MSort(sequence, tmpsequence, left, center);        MSort(sequence, tmpsequence, center+1, right);        Merge(sequence, tmpsequence, left, center, right);    }}void Merge_Sort(int *sequence, int n){    int *tmpsequence;tmpsequence = (int*)malloc(sizeof(int) * n);MSort(sequence, tmpsequence, 0, n-1);free(tmpsequence);}


0 0