首页 > 其他分享 >17.6归并排序原理及实战

17.6归并排序原理及实战

时间:2023-04-14 15:01:51浏览次数:33  
标签:归并 include int ElemType 17.6 low static 排序

#include <stdio.h>
#include <stdlib.h>
#define N 7
typedef int ElemType;

void Merge(ElemType A[],int low,int mid,int high)
{
    static ElemType B[N];    //加static的目的是无论函数执行多少次,都只有一个B[N]
    int i,j,k;
    for (i  = low;  i <= high; i++) {
        //把A[i]里的元素都给B[i]
        B[i]=A[i];
    }
    k=low;
    for (i = low, j = mid+1; i<=mid&&j<=high;) {   //合并两个有序数组
        if(B[i]<B[j])
        {
            A[k]=B[i];
            i++;
            k++;
        } else{
            A[k]=B[j];
            j++;
            k++;
        }
    }
    //把某一个有序数组中剩余的元素放进来
    while (i<=mid)   //前一半有剩余的放入
    {
        A[k]=B[i];
        i++;
        k++;
    }
    while (j<=high)    //后一半有剩余的放入
    {
        A[k]=B[j];
        j++;
        k++;
    }
}
//归并排序不限制是两两归并,还是多个归并,考研是两两归并
void MergeSort(ElemType A[],int low,int high)  //递归分割
{
    if(low<high)
    {
        int mid=(low+high)/2;
        MergeSort(A,low,mid);   //排序好前一半
        MergeSort(A,mid+1,high);   //排序好后一半
        Merge(A,low,mid,high);     //让两个排序好的数组合并
    }
}

//打印
void print(int* a)
{
    for (int i = 0; i < N; i++) {
        printf("%3d",a[i]);
    }
    printf("\n");
}
int main() {
    int A[N]={49,38,65,97,76,13,27};   //数组,7个元素
    MergeSort(A,0,6);
    print(A);
    return 0;
}

标签:归并,include,int,ElemType,17.6,low,static,排序
From: https://www.cnblogs.com/su-1007/p/17318289.html

相关文章

  • Java中常用排序算法及示例-冒泡排序、希尔排序、选择排序、插入排序、合并排序、基数
    场景Java中需要对数据进行排序处理,常用的排序算法以及示例进行归纳整理。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现1、冒泡排序冒泡排序法又称为交换排序法,原理是从第一个元素开始,比较相邻元素的大小,若大小顺序有误,则对调后再进行下一个元素的比较。如此扫描......
  • 17.5堆排序实战
    #include<stdio.h>#include<stdlib.h>#include<time.h>#include<string>typedefintElemType;typedefstruct{ElemType*elem;//存储元素的起始地址intTableLen;//元素个数}SSTable;voidST_Init(SSTable&ST,intlen){S......
  • 数组元素排序(一)
    算法概述定义      排序:假设含有n个记录的序列为{R1,R2,...,Rn},其相应的关键字序列为{K1,K2,...,Kn}。将这些记录重新排序为{Ri1,Ri2,...,Rin},使得相应的关键字值满足条Ki1<=Ki2<=...<=Kin,这样的一种操作称为排序。      通常来说,排序的目的是快速查找......
  • 17.3选择排序原理及实战
    #include<stdio.h>#include<stdlib.h>#include<time.h>#include<string>typedefintElemType;typedefstruct{ElemType*elem;//存储元素的起始地址intTableLen;//元素个数}SSTable;voidST_Init(SSTable&ST,intlen){S......
  • 数组的元素查找排序
    顺序查找顺序查找:挨个查看要求:对数组元素的顺序没要求publicstaticvoidarraySearch(intvalue){int[]arr={4,5,6,1,9};//intvalue=1;intindex=-1;for(inti=0;i<arr.length;i++){if(arr[i]......
  • POJ 1094Sorting It All Out(拓扑排序)
    题目地址:http://poj.org/problem?id=1094这个题改了一下午。。代码越改越挫。。凑活着看吧。。#include<iostream>#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<ctype.h>#include<queue>#include<map>......
  • 力扣:153. 寻找旋转排序数组中的最小值
    已知一个长度为n的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如,原数组nums=[0,1,2,4,5,6,7]在变化后可能得到:若旋转4次,则可以得到[4,5,6,7,0,1,2]若旋转7次,则可以得到[0,1,2,4,5,6,7]注意,数组[a[0],a[1],a[2],...,a[n-1]]旋转一次的结果为数......
  • 16.6快速排序实战
    #include<stdio.h>#include<stdlib.h>#include<time.h>#include<string>typedefintElemType;typedefstruct{ElemType*elem;//存储元素的起始地址intTableLen;//元素个数}SSTable;voidST_Init(SSTable&ST,intlen){S......
  • 排序算法-交换排序
    排序算法-交换排序1.冒泡排序BubbleSort1.1BubbleSort介绍冒泡排序(BubbleSort)的基本思想是:通过对待排序的序列进行从左往右(即从下标较小的元素开始),依次比较相邻元素的值,若逆序则将其顺序交换。重复执行此过程直至没有需要交换的元素,也即说明改序列完成了排序,冒泡排序会......
  • 一个朋友问的排序问题,Collections.sort
    importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;publicclassMySortimplementsComparable<MySort>{privateStringname;privateintage;publicMySort(){super();}publicMySort(Stringname,in......