排序之四:归并排序

来源:互联网 发布:java初级工程师考证 编辑:程序博客网 时间:2024/05/16 19:41
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>typedef int ElementType;//将a[]数组两个子序列lpos->rpos-1和rpos->rightEnd进行归并排序void Merge(ElementType a[], ElementType tmpArray[], int lpos, int rpos, int rightEnd){int i, leftEnd, NumElements, tmpPos;leftEnd = rpos - 1;tmpPos = lpos;NumElements = rightEnd - lpos + 1;while(lpos <= leftEnd && rpos <= rightEnd){if(a[lpos] <= a[rpos])tmpArray[tmpPos++] = a[lpos++];elsetmpArray[tmpPos++] = a[rpos++];}while(lpos <= leftEnd)tmpArray[tmpPos++] = a[lpos++];while(rpos <= rightEnd)tmpArray[tmpPos++] = a[rpos++];for(i = 0; i < NumElements; i++, rightEnd--)a[rightEnd] = tmpArray[rightEnd];}//拆分数组void MSort(ElementType a[], ElementType tmpArray[], int left, int right){int center;if(left < right){center = (left + right) / 2;MSort(a, tmpArray, left, center);MSort(a, tmpArray, center + 1, right);Merge(a, tmpArray, left, center + 1, right);}}//将a[]数组拆分成进行归并排序。void MergeSort(ElementType a[], int n){ElementType *tmpArray;tmpArray = (ElementType*)malloc(n * sizeof(ElementType));if(tmpArray != NULL){MSort(a, tmpArray, 0, n-1);free(tmpArray);}else{printf("error");exit(0);}}int main(){ElementType a[10] = {1, 3, 2, 10, 5, 7, 8, 6, 4, 9};MergeSort(a, 10);for(int i = 0; i < 10; i++)printf("%-4d", a[i]);printf("\n");system("pause");return 0;}

原创粉丝点击