归并排序
来源:互联网 发布:php 输入框 提示信息 编辑:程序博客网 时间:2024/06/08 00:41
说归并排序稳定是因为它是一种稳定的排序方法。(快速排序和堆排序都是不稳定的排序方法)
说归并排序内外兼修是因为它在内部排序和外部排序中都需要用到。
归并,英文是Merge。归并排序,是Merge Sort。
“归并”的含义是将两个或两个以上的有序表组合成一个新的有序表。
假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到⌌n/2⌍个长度为2或1的有序子序列;再两两归并…如此重复,直至得到一个长度为n的有序序列为止,这种排序方法称为2-路归并排序。
2-路归并排序中的核心操作是将一维数组中前后相邻的两个有序序列归并为一个有序序列。
归并排序的源代码:
#include<unistd.h>#include<stdio.h>#include<string.h> void merge(int *arr,int *sarr,int i,int m,int n) //将arr[i..m]和arr[m+1,n]归并为有序的sarr[i..n]{ int j,k,index; for(j=m+1,k=i;i<=m&&j<=n;k++){ if(arr[i]<=arr[j]) sarr[k]=arr[i++]; else sarr[k]=arr[j++]; } if(i<=m){ for(index=i;index<=m;index++) sarr[k++]=arr[index]; } if(j<=n){ for(index=j;index<=n;index++) sarr[k++]=arr[index]; }} void Merge_sort(int *arr,int *sarr,int s,int t) //将arr[s..t]归并排序为sarr[s..t]{ int m; int sarr2[10]={0}; if(s==t) sarr[s]=arr[s]; else{ m=(s+t)/2; //将arr[s..t]平分为arr[s..m]和arr[m+1,t] Merge_sort(arr,sarr2,s,m); //递归地将SR[s..m]归并为有序的sarr2[s..m] Merge_sort(arr,sarr2,m+1,t); //递归地将arr[m+1..t]归并为有序的sarr2[s..t] merge(sarr2,sarr,s,m,t); //将sarr2[s..m]和sarr2[m+1..t]归并到sarr[s..t] }} int main(int argc,char *argv[]){ printf("Quick Sort:/n"); int arr[10]={0,4,2,5,1,8,7,9}; int sarr[10]={0}; int arrsize=7; Merge_sort(arr,sarr,1,arrsize); //进行归并排序 int i; printf("Sorted array: "); for(i=1;i<=arrsize;i++){ printf("%d ",sarr[i]); } printf("/n"); return 0;}
over~
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 真正的编程高手-----激励计算机专业的大学生
- Visual C++ 环境下轻松实现报表处理
- 网页的栅格系统设计
- 插入一个DVD盘后,光驱图标上显示:0字节可用,共(那张盘大小)字节,双击无法打开
- 网页设计中有关网页宽度(960PX)的学问与栅格系统
- 归并排序
- 第一个驱动程序
- Apple A4之NEON技术——NEON寄存器架构
- gearman杂谈
- 大家好!
- ubuntu9.10 软件推荐
- 任务调度程序 Gearman
- 返回一棵二叉搜索树中最深的结点的指针C语言
- 来自圣经的算法