赞
踩
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <assert.h> #define MAXSIZE 10 void initArr(int arr[] , int length); void showArr(int arr[] , int length); void merge(int arr[],int low,int mid,int height,int *temp); void merge_sort(int arr[],int low,int height,int *temp); void mergeSort(int arr[],int length); int main() { srand((unsigned int)time(NULL)); int arr[MAXSIZE]; printf("==========排序前的序列=============\n"); initArr(arr,MAXSIZE); showArr(arr,MAXSIZE); printf("==========归并排序后的序列=============\n"); mergeSort(arr,MAXSIZE); showArr(arr,MAXSIZE); system("pause"); return 0; } void initArr(int arr[] , int length) { for(int i = 0 ; i < length ; i++){ arr[i] = rand()%20; } } void showArr(int arr[] , int length) { for(int i = 0 ; i < length ; i++){ printf("%4d",arr[i]); } printf("\n"); } void merge(int arr[],int low,int mid,int height,int *temp) { int i = low; int j = mid+1; int k = low; while(i <= mid && j <= height){ temp[k++] = arr[i]<arr[j]?arr[i++]:arr[j++]; } while(i <= mid){ temp[k++] = arr[i++]; } while(j <= height){ temp[k++] = arr[j++]; } for(i = low ; i <= height ; i++){ arr[i] = temp[i]; } } void merge_sort(int arr[],int low,int height,int *temp) { if(low>=height){ return; } int mid = low + (height - low)/2; merge_sort(arr,low,mid,temp); merge_sort(arr,mid+1,height,temp); merge(arr,low,mid,height,temp); } void mergeSort(int arr[],int length) { int *temp = (int *)malloc(sizeof(int)*length); assert(temp); merge_sort(arr,0,length-1,temp); free(temp); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。