归并排序(C语言版)
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。
分而治之:
代码一:
//归并排序
#include "stdio.h"
#include <stdlib.h>
void mergeSort(int *arr,int length);
void sortProcess(int *arr, int L, int R);
void merge(int *arr,int L,int mid,int R);
int main(void)
{int i=0;int array[10]={2,7,3,1,6,0,6,5,9,5};mergeSort(array,10);for(i=0;i<10;i++)printf("%d,",array[i]);
}
void mergeSort(int *arr,int length)
{if(arr==NULL || length<2)return;sortProcess(arr,0,length-1);
}
void sortProcess(int *arr, int L, int R)
{int i=0;int mid=(L+R)/2;if(L==R)return; sortProcess(arr,L,mid);sortProcess(arr,mid+1,R);merge(arr,L,mid,R);}
void merge(int *arr,int L,int mid,int R)
{int help[R-L+1];int i=0;int p1=L; int p2=mid+1;while(p1<=mid&&p2<=R){help[i++]=arr[p1]>arr[p2]? arr[p2++]:arr[p1++]; }while(p1<=mid){help[i++]=arr[p1++];}while(p2<=R){help[i++]=arr[p2++];}for(i=0;i<R-L+1;i++){arr[L+i]=help[i];}
}
代码一:
#include<stdio.h>
void Mergesort(int *num,int left,int right);
void Merge(int *num,int left,int middle,int right);
void swap(int *a,int *b);
int main()
{int num[10]={3,6,4,2,5,1,9,2,0,8};int length=sizeof(num)/sizeof(num[0]);int k;Mergesort(num,0,length-1);for(k=0;k<length;k++)printf("%d ",num[k]);
}
void Mergesort(int *num,int left,int right)
{int middle=(left+right)/2;if(left==right)return ;Mergesort(num,left,middle);Mergesort(num,middle+1,right);Merge(num,left,middle,right);
}
void Merge(int *num,int left,int middle,int right)
{for(int i=middle+1;i<=right;i++){for(int j=i;j>left;j--){if(num[j]<num[j-1])swap(&num[j],&num[j-1]);}}
}
void swap(int *a,int *b)
{int temp;temp=*a;*a=*b;*b=temp;
}
归并排序(C语言版)相关推荐
- 排序算法之归并排序 ( C语言版 )
归并排序 :(Merge Sort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即 ...
- 资料分享:送你一本《数据结构(C语言版)》电子书!
要想写出可复用.可扩展.易维护.灵活性好的代码,「数据结构」这一关必须要过啊! 在数据结构与算法的众多教材中,奉为经典的当属清华大学严蔚敏老师的著作.很多学校也选择这本书作为考研指定教材. 正在学习数 ...
- 资料分享:送你一本《数据结构(C#语言版)》电子书!
对于信息类专业的学生而言,数据结构与算法是一门必修的课程.只有学好这门课程,熟练掌握线性表.栈.队列.树.图等基本结构,以及在这些结构上的各种算法,才能利用计算机去解决实际问题. 如何学好这门课程呢, ...
- 数据结构(C语言版) 第 八 章 排序 知识梳理 + 习题详解
目录 一.归并排序 二.交换排序 1.快速排序 2.冒泡排序 三.插入排序 1.直接插入排序(基于顺序查找) 2.折半插入排序(基于折半查找) 3.希尔排序(基于逐趟缩小增量) 四.选择排序 0.直接 ...
- 数据结构(C语言版) 第二章 线性表 知识梳理+作业习题详解
目录 一.线性表顺序存储结构(顺序表) 0.线性表的基本概念 1.样例引入:多项式相加 二.线性表链式存储结构(链表) 0.链表的基本概念 1.前插法代码实例 2.链表尾插法完整代码附带各种操作 三. ...
- 数据结构c语言版实验报告2,数据结构(C语言版) 实验报告 (2)
<数据结构(C语言版) 实验报告 (2)>由会员分享,可在线阅读,更多相关<数据结构(C语言版) 实验报告 (2)(15页珍藏版)>请在人人文库网上搜索. 1.数据结构(C语言 ...
- 数据结构c语言版朱战立报告,数据结构(C语言版)
本书是Sedgewick彻底修订和重写的C算法系列的第一本.全书分为四部分,共16章.第一部分"基础知识"(第1-2章)介绍基本算法分析原理.第二部分"数据结构" ...
- 数据结构C语言版字符串,数据结构c语言版
数据结构c语言版是一款非常使用的数据结构课程的编写和教材:它也可将软件作为学习数据结构.算法C程序设计的参数教材,只需要用户学习该软件之后,就算遇到在繁杂的代码也可以清晰的写出来,本书的钱半部分主要介 ...
- 武汉工程大学c语言作业,武汉工程大学2016考研《数据结构(C语言版)》考试大纲...
2016考研学习交流群:410257364 考试大纲作为考研学子备考复习的方向指南,每年都备受关注,尤其是当年新考试大纲.建议各位考生朋友,在借助往年考试大纲进行复习时,及时关注新考试大纲,以便积极应 ...
- 经典的十种排序算法 C语言版
经典的十种排序算法(C语言版) 1.冒牌排序 冒牌排序的特点 一趟一趟的比较待排序的数组,每趟比较中,从前往后,依次比较这个数和下一个数的大小,如果这个数比下一个数大,则交换这两个数,每趟比较后, ...
最新文章
- python27安装-linux下安装python27 nginx 和uwsgi
- postgresql兴建用户_PostgreSQL 12.2, 11.7, 10.12, 9.6.17, 9.5.21, 和 9.
- JUC编程入门(高并发)
- compoundbutton(compoundbutton是什么意思)
- js截取中英文字符串
- JQuery实现防抖节流
- 计算机网络误区——可以通过非ARP报文(正常数据包)学习ARP表项吗?
- CSS媒体查询(@media)全面解析
- 有哪些wordpress企业网站主题推荐?
- BeanUtils.populate的作用
- 微信小程序怎么添加到主屏幕将微信小程序放到手机桌面?
- 多态的概念,特点和优缺点
- 从Internet时间服务器获取标准时间
- 第一次写“辅助”软件(微信游戏跳一跳)
- OneAuth 5月报:关于身份 少即是多
- 华为云大数据中台架构设计方案
- 告别单身不容易 程序员告别单身功略!
- TT软件用户参考手册
- 雅虎市值_雅虎! 启动BrowserPlus,计划对其进行开源
- 实验5 支持向量机分类实验