合并排序

简介: #include //this program is edited by 200624101101杨振平//this paper's edited time is Nov 7th,2008 //define count of array#def...

#include <stdio.h>

//this program is edited by 200624101101杨振平
//this paper's edited time is Nov 7th,2008

//define count of array
#define N 9
//main function
void main()
{
 //declare MergeSort function
 void MergeSort(int r[ ], int r1[ ], int s, int t);
 //initial the array r[] which require to sort
 int r[N]={9,8,7,6,5,4,3,2,1};
 //define the new array r1[] to store the sort elements
 int r1[N];
 //call the MergeSort function
 MergeSort(r,r1,0,N-1);
 //print the sort result array
 for(int i=0;i<N;i++)
  printf("%d/t",r1[i]);
}
//implement the MergeSort function
void MergeSort(int r[ ], int r1[ ], int s, int t)
{
 //declare the Merge function
 void Merge(int r[ ], int r1[ ], int s, int m, int t);
 //declare variables
 int m,rtemp[N];
 //apply the recurrence general formula
    if (s==t) r1[s]=r[s];   
    else {
            m=(s+t)/2;
   //merge and order the first half son array
            MergeSort(r, r1, s, m);
   //merge and order the last half son array
            MergeSort(r, r1, m+1, t);
   //use a temp array to story the new sort array r1's information
   for(int i=0;i<N;i++)
    rtemp[i]=r1[i];
   //merge the temp array to be an ordered sort array which will be the
   //result of the new array r1,otherwise r1 will recover itself.

   //merge two ordered son array   
            Merge(rtemp, r1, s, m, t);
    }
}
//implement the Merge function
void Merge(int r[ ], int r1[ ], int s, int m, int t)
{
 //declare flag variables and init
 int i,j,k;
    i=s;
 j=m+1;
 k=s;
 //get the min value between r[i] and r[j] to store into r1[k]
    while (i<=m && j<=t)
    {  
            if (r[i]<=r[j]) r1[k++]=r[i++];
            else r1[k++]=r[j++];
    }
 //if the first array has not done all,then ending is handled
    if (i<=m) while (i<=m)
         r1[k++]=r[i++];
 //if the second array has not done all,then ending is handled
    else  while (j<=t)
         r1[k++]=r[j++];
}

目录
相关文章
|
存储 算法 搜索推荐
排序篇(四)----归并排序
排序篇(四)----归并排序
60 0
|
1月前
排序之希尔,归并,快排
排序之希尔,归并,快排
10 0
|
11月前
|
算法 搜索推荐 大数据
【算法】排序——归并排序和计数排序
上两篇文章讲解了插入排序、选择排序以及交换排序,每种类型的排序大类下都有一到两种排序,今天给大家带来的是归并排序,和前面几种排序一样都属于比较排序中的一种,是通过比较数组中的元素来实现排序的,还给大家带来一种非比较排序计数排序,让我们开始今天的排序之吧!!!
|
6月前
|
算法 搜索推荐
排序——归并排序
排序——归并排序
43 0
|
存储 算法 搜索推荐
排序(4)——归并排序
今天给大家带来比较排序的最后一种,归并排序,这个排序,需要我们对递归,循环控制要有着较强的理解,我相信大家通过前面和小编的一起学习,这里肯定也是得心应手。
95 0
|
机器学习/深度学习 算法 API
算法排序5——归并排序&分治思想
算法排序5——归并排序&分治思想
115 0
算法排序5——归并排序&分治思想
|
算法 API 索引
算法排序6——快速排序(分治思想)
对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理
128 0
算法排序6——快速排序(分治思想)
|
算法 搜索推荐
排序——归并排序和计数排序
介绍归并排序和计数排序
109 0
排序——归并排序和计数排序
|
算法 搜索推荐 Java
算法-合并排序
合并排序是基于分治算法原理的最流行的排序算法之一。使用合并排序算法,一个问题被分成多个子问题。每个子问题都是单独解决的。最后,将子问题组合起来形成最终解决方案。
193 0
|
移动开发 自然语言处理 算法
排序——归并排序 & 基数排序
排序——归并排序 & 基数排序
167 0
排序——归并排序 & 基数排序