归并排序

来源:互联网 发布:淘宝店铺布局图片多大 编辑:程序博客网 时间:2024/05/20 02:26


分治法的典型排序 左右分别分割再排序合并 以达到排序的目的


---C语言实现

#include <stdio.h>#include <stdlib.h>#include <windows.h>//遍历数组void LoopForArr(int arr[],int length){int count;if(arr == NULL || length <=0)return ;for(count = 0;count<length;count++){printf("%d  ",arr[count]);}printf("\n");}//合并void MergerAndSort(int arr[],int low,int mid,int high,int TempArr[]){int Left = low;int Right = mid+1;int count = low;while(Left<=mid && Right<=high){TempArr[low++] = arr[Left] <arr[Right]?arr[Left]:arr[Right];arr[Left] <arr[Right]?Left++:Right++;}while(Left<=mid)TempArr[low++] = arr[Left++];while(Right<=high)TempArr[low++] = arr[Right++];for(count;count<=high;count++){arr[count] = TempArr[count];}}//归并过程void SeprateAndmerger(int arr[],int low,int high,int TempArr[]){int mid;if(low<high){mid = (low+high)/2;SeprateAndmerger(arr,low,mid,TempArr);SeprateAndmerger(arr,mid+1,high,TempArr);MergerAndSort(arr,low,mid,high,TempArr);}}//归并排序void MergerSort(int arr[],int length){int low;int high;int *TempArr = NULL;if(arr == NULL || length <=0)return ;low = 0;high = length-1;TempArr = (int *)malloc(sizeof(int)*length);memset(TempArr,0,sizeof(int)*length);SeprateAndmerger(arr,low,high,TempArr);free(TempArr);TempArr = NULL;}int main(){int arr[] = {22,34,1,6,9,123,55,78,12,4,56,87,52};MergerSort(arr,sizeof(arr)/sizeof(arr[0]));LoopForArr(arr,sizeof(arr)/sizeof(arr[0]));system("pause");return 0;}

0 0
原创粉丝点击