归并排序-学习笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序-学习笔记相关的知识,希望对你有一定的参考价值。

归并排序的主要思想:它的主要思想就是分而治之的思想,首先,他是把一个待排序数组分为两个待排序为一个小组的若干个数组,这是分,然后把这些个待排序的小数组两两合并,合并为一个排好序的数组,这就是治。归并排序是稳定排序。

代码如下:

#include<cstdio>
int temp[100];//把缓存数组定义为全局变量,避免每次回溯都开辟新的存储空间
void MergeSort(int a[],int left,int right){
    int l=left,r=right,mid=(l+r)/2,i=mid+1;//定义变量,left是数组的左边界,right是数组的右边界,i是第二个待排数组的第一个数
    if(l<=r){ //递归,直到剩两个元素为止,注意这里不能写为l<=r 这样会死循环
        MergeSort(a,l,mid);
        MergeSort(a,mid+1,r);

        int k=0;//初始化缓存数组的下角标为0

        while(l<=mid&&i<=right){//当左右待排数组都有元素时,从小到大依次放入缓存数组
            if(a[l]<a[i]){
                temp[k++]=a[l++];
            }
            else{
                temp[k++]=a[i++];
            }
        }
        while(l<=mid){//当只有左待排数组有元素时,直接放入缓存数组
            temp[k++]=a[l++];
        }
        while(i<=right){//当只有右待排数组有元素时,直接放入缓存数组
            temp[k++]=a[i++];
        }
        for(i=left,k=0;i<=right;i++,k++){//把缓存数组中的元素copy到原数组中
            a[i]=temp[k];
        }
    }
}
int main(){
    int a[20],n;
    scanf("%d",&n);
    for(int i=0; i<n; i++)
    {
        scanf("%d",&a[i]);
    }
    MergeSort(a,0,n-1);
    for(int i=0; i<n; i++)
    {
        printf("%d ",a[i]);
    }
}

 

以上是关于归并排序-学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

冒泡排序,插入排序,归并排序,快速排序的学习笔记

数据结构学习笔记——归并排序

数据结构学习笔记——归并排序

数据结构学习笔记——归并排序

算法(第四版)学习笔记——归并排序

python 学习笔记 -- 数据结构与算法 归并排序 Merge Sort