设为首页 加入收藏

TOP

排序(6)---------归并排序(C语言实现)
2015-01-22 21:26:27 来源: 作者: 【 】 浏览:54
Tags:排序 --------- 归并 语言 实现


归并排序:

归并操作,也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。

归并操作的过程如下:
(1) 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
(2) 设定两个指针,最初位置分别为两个已经排序序列的起始位置
(3) 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
(4) 重复步骤3直到某一指针到达序列尾

(5) 将另一序列剩下的所有元素直接复制(抄)到合并序列尾


简单的说,就是将一个序列不断的进行二分(当然也可以三分、多分)分裂,然后递归下去,再合并。


源代码:

/*=============================================================================
#
#     FileName: Merge_Sort.c
#         Desc: 归并排序
#
#       Author: zhangyuqing   
#
#      Created: 2014年6月29日23:18:16
#      Version: 0.0.1
#
=============================================================================*/


#include "stdafx.h"
#include 
  
   
#include 
   
     //归并操作 void merge(int src[], int des[], int low, int high ,int mid) { int i = low; int k = low; int j = mid + 1; while (( i <= mid ) && ( j <= high )) { if (src[i] < src[j]) { des[k++] = src[i++]; } else { des[k++] = src[j++]; } } while (i <= mid) { des[k++] = src[i++]; } while (j <= high) { des[k++] = src[j++]; } } void MSort(int src[], int des[] ,int low, int high, int max_size) { int mid = (low + high) / 2; if (low == high) { des[low] = src[low]; } else { int mid = (low + high) / 2; int * des_space = (int *)malloc(sizeof(int) * max_size); if (NULL != des_space) { MSort( src, des_space, low, mid, max_size); MSort( src, des_space, mid+1, high, max_size); merge( des_space, des, low, high, mid); } free(des_space); } } void Meger_Sort(int arr[], int low, int high, int len) { MSort( arr, arr, low, high, len); } int main(void) { int arr[10]; for ( int i=0; i<10; i++) //初始化数据 { arr[i] = rand()%100; //随机生成数据 } printf("Before sort:\n"); //打印排序前的数据 for (int i = 0; i < 10; i++) { printf("%d ",arr[i]); } //开始排序 Meger_Sort( arr, 0, 10-1, 10); printf("\nAfter sort:\n"); //打印排序后的数据 for (int i = 0; i < 10; i++) { printf("%d ",arr[i]); } system("pause"); return 0; }
   
  

运行结果:

Before sort:
41 67 34 0 69 24 78 58 62 64
After sort:
0 24 34 41 58 62 64 67 69 78 请按任意键继续. . .



如有错误,望不吝指出。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言内存使用的常见问题及解决之.. 下一篇排序(5)---------快速排序(C语言..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: