栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

排序——归并排序

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

排序——归并排序

归并排序 算法设计
  • 将大的问题分解成多个子问题进行求解,子问题还可以继续分解,直到问题规模可以直接求解。
  • 将序列分成两个子序列,使子序列有序,然后将两个有序的子序列合并成有序序列
C语言实现
void mergeSort(int* arr,int start,int end) {
    int len = end - start;
    if (len <= 1) {
        return;
    }
    int mid = (start+end)/2;
    mergeSort(arr,start,mid);
    mergeSort(arr,mid,end);
    int* temp = (int*)malloc(len * sizeof(int));
    int l=start,r=mid,index=0;
    while (l< mid && r < end) {
        if (arr[l] <= arr[r]) {
            temp[index] = arr[l];
            l++;index++;
        } else {
            temp[index] = arr[r];
            r++;index++;
        }
    }
    while (l < mid) {
        temp[index] = arr[l];
        l++;index++;
    }
    while (r < end) {
        temp[index] = arr[r];
        r++;index++;
    }
    for (l = start,index = 0; l < end; l++,index++) {
        arr[l] = temp[index];
    }
    free(temp);
}
算法分析
  • 稳定的
  • 空间复杂度为O(n)
  • 当两个子序列逐个交替输出时,比较次数最大;当其中一个子序列直接输出时,比较次数最小。但总的时间复杂度依然为O(nlogn)
  • 平均时间复杂度为O(nlogn)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/961000.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号