C语言之归并排序

简介:

 即将两个都升序(或降序)排列的数据序列合并成一个仍按原序排列的序列。


上代码:

#include <stdio.h>
#include <stdlib.h>
#define m 6
#define n 4
int main()
{ 
  	int a[m]={-3,6,19,26,68,100} ,b[n]={8,10,12,22};
 	int i,j,k,c[m+n];
 	int l ;
  	i=j=k=0;
  	printf("a数组的元素:\n");
  	for(l = 0 ; l < m ; l++)
  	{
  		printf("%d  ",a[l]);	
	}
	printf("\nb数组的元素:\n");
	for(l = 0 ; l < n ; l++)
  	{
  		printf("%d  ",b[l]);	
	}
	printf("\n合并后的数组元素:\n");
	while(i<m && j<n)    /*将a、b数组中的较小数依次存放到c数组中*/
    { 
		if(a[i]<b[j]) 
		{
			c[k]=a[i]; 
			i++;
		}
     	else 
		{
			c[k]=b[j]; 
			j++;
		}
     	k++;
 	}
	while(i>=m && j<n)   /*若a中数据全部存放完毕,将b中余下的数全部存放到c中*/
	{ 
		c[k]=b[j]; 
		k++; 
		j++; 
	}
 	while(j>=n && i<m)   /*若b中数据全部存放完毕,将a中余下的数全部存放到c中*/
 	{ 
	 	c[k]=a[i]; 
		k++; 
		i++; 
	}
 	for(i=0;i<m+n;i++)  
	  printf("%d  ",c[i]);
	return 0 ;
}
运行结果:




目录
相关文章
|
8月前
|
搜索推荐 C语言
数据结构(C语言)之对归并排序的介绍与理解
归并排序是一种基于分治策略的排序算法,通过递归将数组不断分割为子数组,直到每个子数组仅剩一个元素,再逐步合并这些有序的子数组以得到最终的有序数组。递归版本中,每次分割区间为[left, mid]和[mid+1, right],确保每两个区间内数据有序后进行合并。非递归版本则通过逐步增加gap值(初始为1),先对单个元素排序,再逐步扩大到更大的区间进行合并,直至整个数组有序。归并排序的时间复杂度为O(n*logn),空间复杂度为O(n),且具有稳定性,适用于普通排序及大文件排序场景。
|
搜索推荐 C语言
【数据结构】—超级详细的归并排序(含C语言实现)
【数据结构】—超级详细的归并排序(含C语言实现)
|
搜索推荐 C语言 C++
【排序算法】C语言实现归并排序,包括递归和迭代两个版本
【排序算法】C语言实现归并排序,包括递归和迭代两个版本
311 1
|
算法 C语言
数据结构和算法——归并排序(有序子列的归并、递归算法、非递归算法、思路图解、C语言代码)
数据结构和算法——归并排序(有序子列的归并、递归算法、非递归算法、思路图解、C语言代码)
100 0
|
搜索推荐 C语言
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
100 0
|
算法 搜索推荐 C语言
C语言数据结构之排序整合与比较(冒泡,选择,插入,希尔,堆排序,快排及改良,归并排序,计数排序)
C语言数据结构之排序整合与比较(冒泡,选择,插入,希尔,堆排序,快排及改良,归并排序,计数排序)
|
存储 算法 搜索推荐
数据结构排序——详细讲解归并排序(c语言实现递归及非递归)
数据结构排序——详细讲解归并排序(c语言实现递归及非递归)
174 0
|
算法 搜索推荐 C语言
用C语言对学生成绩进行排序(归并排序和基数排序)
本文主要是使用C语言对学生成绩进行排序,使用的排序算法是归并排序和基数排序,含源码!
412 1
用C语言对学生成绩进行排序(归并排序和基数排序)
|
人工智能 算法 C语言
C语言归并排序
C语言归并排序
90 0
|
算法 搜索推荐 C语言
【C语言】归并排序
【C语言】归并排序
128 0