首页 > 编程语言 >归并排序,时间复杂度O(n*logn),空间复杂度O(n),是稳定算法

归并排序,时间复杂度O(n*logn),空间复杂度O(n),是稳定算法

时间:2024-04-10 22:13:37浏览次数:29  
标签:归并 temp int 复杂度 ++ 数组 logn left

空间复杂度原因是因为需要额外数组空间来进行排序
时间复杂度 T(n)=2T(n/2)+O(n),a=2,b=2,c=1根据master公式可知时间复杂度O(nlogN)
归并排序可以排序数据量很大的数组,举例说明,例如要排序有2^64个数字的数组,那么归并排序将会开辟64层系统栈,这并不会导致栈溢出.

include<stdio.h>

void merge(int a[],int left,int mid,int right){
int length=right-left+1;//5-0+1;因为有数组零下标的存在,所以要多加一
int temp[length]; //创建一个对应长度的数组
int i=left; //左指针
int j=mid+1; //右指针
int k=0; //记录temp数组的下标指针
//把较小的数移到新temp数组中
while(i<=mid&&j<=right){
if(a[i]<a[j]){
temp[k++]=a[i++];
}else{
temp[k++]=a[j++];
}
}
//把左边剩余的数移入数组
while(i<=mid){
temp[k++]=a[i++];
}
//把右边剩余的数移入数组
while(j<=right){
temp[k++]=a[j++];
}
for(int i=left;i<=right;i++){
a[i]=temp[i-left];//输入回原数组
}
}
void mergeSort(int a[],int left,int right){
int mid=(left+right)/2;
if(left<right){
mergeSort(a,left,mid);
mergeSort(a,mid+1,right);
merge(a,left,mid,right);
}
}

标签:归并,temp,int,复杂度,++,数组,logn,left
From: https://www.cnblogs.com/tai--shang/p/18127596

相关文章

  • 软件系统复杂度带来的问题--高性能
    复杂度来源:高性能       计算机,从电子管计算机到晶体管计算机再到集成电路计算机,运算性能从每秒几次提升到每秒几亿次。但伴随性能越来越高,相应的方法和系统复杂度也是越来越高。现代的计算机CPU集成了几亿颗晶体管,逻辑复杂度和制造复杂度相比最初的晶体管计算机,根本不......
  • 复杂度分析
    拥有对程序复杂度分析能力,提升程序和算法的性能学习数据结构前先要理解时间复杂度和空间复杂度;算法所追求的就是所需运行时间更少(时间复杂度更低)、占用内存空间更小(空间复杂度更低)。所以需要进行算法分析,就是从运行时间情况、空间使用情况两方面对算法进行分析时间复杂度:算法......
  • 说说你对算法中时间复杂度,空间复杂度的理解?如何计算?
    一、前言算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别衡量不同算法之间的优劣主要是通过时间和空间两个维度去考量:时间维度:是指执行当前算法所消耗的时间,我......
  • 分治思想排序(快速排序、归并排序)
    分治:分而治之,即把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并优点:降低时间复杂度:分治法可以将大问题分解为小问题,通过解决小问题来有效解决原问题,从而降低算法的时间复杂......
  • (数据结构——比特)算法的时间复杂度和空间复杂度
    目录1.算法效率如何衡量一个算法的好坏算法的复杂度复杂度在校招中的考察2.时间复杂度时间复杂度的概念 请计算一下Func1中++count语句总共执行了多少次?Func1执行的基本操作次数: 大O的渐进表示法推导大O阶方法:使用大O的渐进表示法以后,Func1的时间复杂度为: 另......
  • 【数据结构】时间和空间复杂度
    摘要:时间和空间复杂度是评估算法效率的两个重要指标,它们分别关注算法在执行过程中所消耗的时间和空间资源。本文将介绍时间和空间复杂度的概念、计算方法以及它们在算法设计与分析中的重要性,以及如何在实际应用中平衡时间和空间复杂度,以达到最佳的算法性能。1.引言在计......
  • 归并排序 返回逆序数 python
    defmerge_sort_and_count_inversions(arr):n=len(arr)ifn<=1:returnarr,0#如果n小于等于1,数组已经有序,直接返回数组本身和逆序数0mid=n//2left_lst,inv_left=merge_sort_and_count_inversions(arr[:mid])#对左半部分进行递......
  • 时间复杂度和空间复杂度
    通过什么来衡量一个算法的好坏呢,那就是时间复杂度和空间复杂度。实现相同功能但时间和空间复杂度更优的算法是更优的算法,算法需要优化也可以从时间或者空间的复杂度的角度来考虑。时间复杂度主要衡量一个算法执行所需的时间长短,具体来说,如果一个算法的时间复杂度是O(n),那么......
  • 二叉树的高效非递归层次遍历:一种O(n)时间复杂度与固定空间复杂度的解决方案
    @TOC在计算机科学中,二叉树是一种非常重要的数据结构,它在算法设计和问题解决中扮演着关键角色。本文将探讨如何使用非递归方法遍历一个给定的二叉树,并在不修改树结构的前提下,输出每个节点的关键字。这个过程将在O(n)的时间复杂度内完成,并且只使用固定量的额外存储空间。1.......
  • Java归并排序知识点(含面试大厂题和源码)
    归并排序是一种有效的排序算法,采用分治法(DivideandConquer)策略。它将数组分成两半,对每一半递归地进行排序,然后将两个有序的半部分合并成一个整体的有序数组。归并排序在最坏情况、平均情况和最好情况下都保持(O(n\logn))的时间复杂度,是一种稳定的排序算法。由于其分而治......