排序算法05:归并排序
2012-07-10 15:02
204 查看
归并排序(MergeSort)
耗时 Time = 27ms。
#include "MergeSort.h" void Merge(int A[], int Start, int Mid, int End) { int n1 = Mid - Start + 1; int n2 = End - Mid; int *Left = (int*)malloc(n1 * sizeof(int)); int *Right = (int*)malloc(n2 * sizeof(int)); int i, j, k; for(i = 0; i < n1; i++) Left[i] = A[Start + i]; for(j = 0; j < n2; j++) Right[j] = A[Mid + 1 + j]; i = j = 0; k = Start; while(i < n1 && j < n2) { if(Left[i] < Right[j]) A[k++] = Left[i++]; else A[k++] = Right[j++]; } while(i < n1) A[k++] = Left[i++]; while(j < n2) A[k++] = Right[j++]; } void MergeSort(int A[], int N, int Start, int End) { int Mid; if(Start < End) { Mid = (Start + End) / 2; /* printf("sort (%d-%d, %d-%d) ", Start, Mid, Mid + 1, End); for(int c = 0; c < N; c++) { printf("%d ", A[c]); } printf("\n"); */ MergeSort(A, N, Start, Mid); MergeSort(A, N, Mid + 1, End); Merge(A, Start, Mid, End); /* printf("merge (%d-%d, %d-%d) ", Start, Mid, Mid + 1, End); for(int c = 0; c < N; c++) { printf("%d ", A[c]); } printf("\n"); */ } }
耗时 Time = 27ms。
相关文章推荐