`
shaojiashuai123456
  • 浏览: 262706 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

合并排序 --c语言实现

 
阅读更多
#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;
}

 

分享到:
评论

相关推荐

    分治策略 合并排序 快速排序 代码 C语言

    例如,合并排序的实现可能涉及到动态内存分配、指针操作,而快速排序则需要理解如何使用指针进行数组元素的交换和分割。 在实际编码过程中,我们需要注意以下几点: 1. 递归深度限制:对于大规模数据,要警惕递归...

    合并排序与插入排序C语言代码

    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)...

    合并排序,插入排序,希尔排序,快速排序,冒泡排序,桶排序的C语言实现

    本文将详细讲解六种经典的排序算法——合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合提供的文件名(sort.c、set.c、main.c、set.h、sort.h)推测出每个文件可能包含的代码实现。 1. **合并...

    合并排序C语言实现

    经典排序算法的合并排序算法的C语言实现,适合初学者

    归并排序C语言实现

    在C语言中实现归并排序,我们需要理解以下几个关键知识点: 1. **分治法**:归并排序的核心思想是将大问题分解为小问题来解决。首先将数组分为两半,分别对两半进行排序,然后合并两个已排序的半部分,得到完整的...

    合并排序算法C语言源程序.zip

    在C语言中实现合并排序,我们可以深入理解这个算法的原理,以及如何用C语言来编写代码。本文将详细探讨合并排序算法的理论基础,C语言实现的关键步骤,以及如何验证程序的正确性。 合并排序的核心思想是将大问题...

    c语言常用算法-----列举C语言各种常用算法

    - 归并排序:也是基于分治策略,将序列分为两半分别排序再合并,时间复杂度始终为O(nlogn)。 2. **查找算法**: - 线性查找:从头到尾遍历序列,找到目标元素,时间复杂度为O(n)。 - 二分查找:适用于有序数组,...

    合并排序,用c语言实现

    这是我写的一个合并排序 用c语言实现 的,

    排序算法-基于C语言实现的排序算法之MergeSort实现.zip

    C语言实现归并排序时,我们需要定义函数来实现分割、排序和合并的过程。主要的函数可能包括: - `merge()`:用于合并两个已排序的子序列。 - `mergeSort()`:递归地对数组进行分割和排序。 - `splitArray()`:根据...

    七大排序算法--c语言是实现

    七大排序算法如下: 交换排序:快速排序quicksort,冒泡排序bubblesort 选择排序:直接选择排序selectionsort,堆排序maxheapsort 插入排序:直接插入排序insertsort,希尔排序shellsort...合并排序:归并排序mergesort

    排序算法-基于C语言实现的排序算法之BucketSort实现.zip

    在提供的压缩包文件中,`排序算法_基于C语言实现的排序算法之BucketSort实现`可能包含了源代码文件,这些文件可能包括了BucketSort的C语言实现,以及可能的测试用例。通过阅读和分析这些源码,你可以更深入地理解...

    合并排序算法的C语言实现

    合并排序算法的C语言实现,在VC开发环境下验证通过

    数据结构--用c语言描述

    在本章中,我们将探讨用C语言实现的数据结构,特别是几种不同的排序算法。 首先,排序是数据处理中常见且重要的任务,其目的是按照某种规则对一组数据进行排列。在第八章中,提到了稳定排序和不稳定排序两种分类: ...

    数据结构--严蔚敏(c语言版)

    - **归并排序**:同样基于分治法思想,将数组分成两半,递归地对每一半进行排序,然后合并结果。 ### 综合分析比较 本书不仅介绍了各种数据结构和算法,还对其性能进行了深入分析和比较。例如,对于排序算法,通常...

    C语言实现多种链表快速排序

    在C语言中实现链表快速排序,首先需要理解链表和快速排序的基本概念。链表不同于数组,它不连续存储数据,而是通过指针连接各个节点。每个节点包含数据元素和指向下一个节点的指针。快速排序的核心是“分区操作”和...

    C语言版的排序方法---合并排序.docx

    在这个C语言实现的合并排序中,主要涉及两个关键部分:一是如何将数组拆分为更小的部分,二是如何将这些小部分有序地合并。 首先,我们来看一下合并过程。在这个实现中,有两个版本的`Merge`函数,分别是`...

    选择排序、插入排序、冒泡排序以及快速排序和归并排序的C语言实现,绝对可用

    选择排序、插入排序、冒泡排序以及快速排序和归并排序的C语言实现,绝对可用

    自然合并排序(是对合并排序的非递归形式的一种改进)

    自然合并排序是对合并排序的非递归形式的一种改进,很好很有用

    合并排序算法(本地交换)的C语言实现

    合并排序的合并算法一般是异地交换,本文件通过本地交换和异地交换两种方式实现了合并排序,在VC开发环境下验证通过

    数据结构与算法分析第二版 ---C语言描述(附加答案)

    堆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 插入排序的...

Global site tag (gtag.js) - Google Analytics