博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序(6)---------归并排序(C语言实现)
阅读量:7043 次
发布时间:2019-06-28

本文共 1956 字,大约阅读时间需要 6 分钟。

归并排序:

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

归并操作的步骤例如以下:
    (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 64After sort:0 24 34 41 58 62 64 67 69 78 请按随意键继续. . .

如有错误,望不吝指出。

转载地址:http://qaqal.baihongyu.com/

你可能感兴趣的文章
C#.NET解析XML(简单实例)
查看>>
osg实例介绍
查看>>
POJ 1200 Crazy Search【Hash入门】
查看>>
Python(socket编程——2)
查看>>
BUAA-OO 第二单元作业“电梯调度”总结与思考
查看>>
redis 系列17 持久化 AOF
查看>>
Android学习5—布局简介
查看>>
bootstrap按钮
查看>>
Spring MVC Mock demo
查看>>
Mybatis与Spring的原生Dao整合
查看>>
Linux操作系统上用数据泵导库
查看>>
3n+1猜想
查看>>
【机器学习笔记一】协同过滤算法 - ALS
查看>>
数组,冒泡排序
查看>>
[洛谷] P1803 凌乱的yyy / 线段覆盖 (贪心)
查看>>
从客户端中检测到有潜在危险的 Request.Form 值。
查看>>
可移动,可放大的图片查看功能
查看>>
PHP GZ压缩与解压
查看>>
Silverlight 结构分析
查看>>
table中文字溢出时用省略号表示
查看>>