#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//将两个有序序列合并为一个有序序列
void merge(int a[],int left_pos,int right_pos)
{
int temp[right_pos-left_pos+1];
int mid=(left_pos+right_pos)/2;
int left=left_pos,right=mid+1;
int count=0;
while(left<=mid&&right<=right_pos)
{
if(a[left]<=a[right])
{
temp[count++]=a[left++];
}
else
{
temp[count++]=a[right++];
}
}
while(left<=mid)
{
temp[count++]=a[left++];
}
while(right<=right_pos)
{
temp[count++]=a[right++];
}
memcpy(&a[left_pos],temp,sizeof(temp));
}
//合并排序
void merge_sort(int a[],int left_pos,int right_pos)
{
if(left_pos<right_pos)
{
//一分为二
int mid=(left_pos+right_pos)/2;
//左合并
merge_sort(a,left_pos,mid);
//右合并
merge_sort(a,mid+1,right_pos);
//合而为一
merge(a,left_pos,right_pos);
}
}
int main()
{
//测试用例
int a[]={331,34,43,64,75,43,7,4234,876,34};
//合并排序
merge_sort(a,0,9);
//打印结果
int i;
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
system("pause");
return 1;
}
分享到:
相关推荐
例如,合并排序的实现可能涉及到动态内存分配、指针操作,而快速排序则需要理解如何使用指针进行数组元素的交换和分割。 在实际编码过程中,我们需要注意以下几点: 1. 递归深度限制:对于大规模数据,要警惕递归...
C语言实现合并排序的代码框架如下: ```c void mergeSort(int arr[], int left, int right) { if (left ) { int mid = left + (right - left) / 2; mergeSort(arr, left, mid); mergeSort(arr, mid + 1, right)...
本文将详细讲解六种经典的排序算法——合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合提供的文件名(sort.c、set.c、main.c、set.h、sort.h)推测出每个文件可能包含的代码实现。 1. **合并...
经典排序算法的合并排序算法的C语言实现,适合初学者
在C语言中实现归并排序,我们需要理解以下几个关键知识点: 1. **分治法**:归并排序的核心思想是将大问题分解为小问题来解决。首先将数组分为两半,分别对两半进行排序,然后合并两个已排序的半部分,得到完整的...
在C语言中实现合并排序,我们可以深入理解这个算法的原理,以及如何用C语言来编写代码。本文将详细探讨合并排序算法的理论基础,C语言实现的关键步骤,以及如何验证程序的正确性。 合并排序的核心思想是将大问题...
- 归并排序:也是基于分治策略,将序列分为两半分别排序再合并,时间复杂度始终为O(nlogn)。 2. **查找算法**: - 线性查找:从头到尾遍历序列,找到目标元素,时间复杂度为O(n)。 - 二分查找:适用于有序数组,...
这是我写的一个合并排序 用c语言实现 的,
C语言实现归并排序时,我们需要定义函数来实现分割、排序和合并的过程。主要的函数可能包括: - `merge()`:用于合并两个已排序的子序列。 - `mergeSort()`:递归地对数组进行分割和排序。 - `splitArray()`:根据...
七大排序算法如下: 交换排序:快速排序quicksort,冒泡排序bubblesort 选择排序:直接选择排序selectionsort,堆排序maxheapsort 插入排序:直接插入排序insertsort,希尔排序shellsort...合并排序:归并排序mergesort
在提供的压缩包文件中,`排序算法_基于C语言实现的排序算法之BucketSort实现`可能包含了源代码文件,这些文件可能包括了BucketSort的C语言实现,以及可能的测试用例。通过阅读和分析这些源码,你可以更深入地理解...
合并排序算法的C语言实现,在VC开发环境下验证通过
在本章中,我们将探讨用C语言实现的数据结构,特别是几种不同的排序算法。 首先,排序是数据处理中常见且重要的任务,其目的是按照某种规则对一组数据进行排列。在第八章中,提到了稳定排序和不稳定排序两种分类: ...
- **归并排序**:同样基于分治法思想,将数组分成两半,递归地对每一半进行排序,然后合并结果。 ### 综合分析比较 本书不仅介绍了各种数据结构和算法,还对其性能进行了深入分析和比较。例如,对于排序算法,通常...
在C语言中实现链表快速排序,首先需要理解链表和快速排序的基本概念。链表不同于数组,它不连续存储数据,而是通过指针连接各个节点。每个节点包含数据元素和指向下一个节点的指针。快速排序的核心是“分区操作”和...
在这个C语言实现的合并排序中,主要涉及两个关键部分:一是如何将数组拆分为更小的部分,二是如何将这些小部分有序地合并。 首先,我们来看一下合并过程。在这个实现中,有两个版本的`Merge`函数,分别是`...
选择排序、插入排序、冒泡排序以及快速排序和归并排序的C语言实现,绝对可用
自然合并排序是对合并排序的非递归形式的一种改进,很好很有用
合并排序的合并算法一般是异地交换,本文件通过本地交换和异地交换两种方式实现了合并排序,在VC开发环境下验证通过
堆6.6 左式堆6.6.1 左式堆的性质6.6.2 左式堆的操作6.7 斜堆6.8 二项队列6.8.1 二项队列结构6.8.2 二项队列操作6.8.3 二项队列的实现总结练习参考文献第7章 排序7.1 预备知识7.2 插入排序7.2.1 算法7.2.2 插入排序的...