首页 > 其他分享 >时间复杂度(常数循环、strchr、冒泡排序、二分查找)

时间复杂度(常数循环、strchr、冒泡排序、二分查找)

时间:2024-01-07 22:32:18浏览次数:31  
标签:strchr end int 复杂度 冒泡排序 查找 str

1.1常数循环

//计算复杂度
void Func4(int k)
{
  int count=0;
  for(intk=0;k<100;++k)
  {
    ++count;
  }
  printf("%d\n",count);
}

时间复杂度为:O(1)  

注:O(1)不是代表算法只能运行一次,是常数次

1.2strchr的时间复杂度

//计算strchar的时间复杂度
const char* strchr(const char* str,int character)

strchr主要用来查找字符串中的某个字符

while(*str)
{
  if(*str==character)
    return str;
  else
    ++str;
}

假设在一串字符“hello world”中分别查找h w d 三个字符

所以也分为三种情况:最好    平均     最坏

                                O(1)   O(N/2)  O(N)

注:当一个算法随着输入的不同,时间复杂度做悲观的预期,看最坏的情况

所以该算法的时间复杂度为O(N)

1.3冒泡排序的时间复杂度

//计算BubbleSort的时间复杂度?
void BubbleSort(int* a,int n)
{
  assert(a);
  for(size_t end=n;end>0;--end)
  {
    int exchange=0;
    for(size_t=1;i<end;++i)
    {
      if(a[i-1]>a[i])
      {
        Swap(&a[i-1],&a[i]);
        exchange=1;
      }
    }
    if(exchange==0)
      break;
  }
}

精确:F(N)=N*(N-1)/2

时间复杂度:O(N^2)

1.4二分查找

//计算BinarySearch的时间复杂度
int BinarySearch(int* a,int n,int x)
{
  assert(a);
  int begin=0;
  int end=n-1;
  while(begin<end)
  {
    int mid=begin+((end-begin)>>1);
    if(a[mid]<x)
      begin=mid+1;
    else if(a[mid]>x)
      end=mid;
    else
      return mid;
  }
  return -1;
}

时间复杂度:O(log2N)

简单介绍一下二分查找的威力之大:

N个数中查找:                大概查找次数:

  • 1000                                  10
  • 100万                                 20  
  • 10亿 30

解释:2t=N      210=1024   220=210*210大概就等于十万

   
















标签:strchr,end,int,复杂度,冒泡排序,查找,str
From: https://blog.51cto.com/u_16351083/9135223

相关文章

  • 算法的时间复杂度和空间复杂度
    1.算法效率1.1如何衡量一个算法的好坏longlongFib(intN){if(N<3){return1;}returnFib(N-1)+Fib(N-2);}斐波那契数列的递归实现方式非常简洁,但是简洁一定好吗?那应该如何衡量其好与坏呢?1.2算法的复杂度衡量一个算法的好坏,一般是从时间和空间上来衡量的,即时间......
  • 【C++】STL 容器 - list 双向链表容器 ① ( 容器特点 | 容器操作时间复杂度 | 构造函
    文章目录一、list双向链表容器简介1、容器特点2、容器操作时间复杂度3、遍历访问5、头文件二、list双向链表容器构造函数1、默认无参构造函数2、创建包含n个相同元素的list双向链表3、使用初始化列表构造list双向链表4、使用另外一个list容器构造list双向链表容器......
  • Python时间复杂度计算题答案
    评论题目链接答案时间复杂度:O(n)。分析:这段代码遍历了n次,所以时间复杂度是线性的,即O(n)。时间复杂度:O(n^2)。分析:两个嵌套的循环,每个循环都运行n次,因此时间复杂度是二次的,即O(n^2)。时间复杂度:O(logn)。分析:每次循环i都翻倍,因此循环的次数是log2(n)。时间复杂度:O(n*m)。分析:......
  • Vue检测密码复杂度方法
    Vue检测密码复杂度方法<!--检测密码复杂度方法--><template><div><inputtype="password"v-model="password"@input="checkPasswordComplexity"><divv-if="complexityMessage">{{complexityMessa......
  • STM32采集传感器数据通过冒泡排序取稳定值
    STM32采集传感器数据通过冒泡排序取稳定值一、前言在物联网、单片机开发中,经常需要采集各种传感器的数据。比如:温度、湿度、MQ2、MQ3、MQ4等等传感器数据。这些数据采集过程中可能有波动,偶尔不稳定,为了得到稳定的值,我们可以对数据多次采集,进行排序,去掉最大......
  • 番外---时间复杂度表
    备注:Y为可以,N为不可以问题规模n可用算法的时间复杂度O(log2n)         O(n)            O(nlog2n)         O(n^2)O(2^n)  O(n!)n<=11YYYYYYn<=25YYYYYNn<=5000......
  • 【模版】冒泡排序
    刚学C++时书上就会写这个qwq属于最简单的排序算法惹。算法步骤比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对......
  • 数据结构算法---冒泡排序
    冒泡排序(BubbleSort)是一种简单的排序算法,它重复地遍历要排序的列表,比较相邻两个元素并按照大小交换位置,直到整个列表排序完成。这种排序算法得名于越小的元素会经由交换慢慢"浮"到列表的顶端。下面是冒泡排序的基本步骤:从列表的第一个元素开始,比较它与下一个元素的大小。如果......
  • 空间复杂度
    空间复杂度概念:和时间复杂度一样,时对一个算法在运行过程中临时占用存储空间大小的量度。空间复杂度不是程序占用了多少bytes的空间,因为这也没什么意义,所以空间复杂度算的是变量的个数,也使用大O监禁表示法。voidBubbleSort(int*a,inn){assert(a)for(size_tend=n;end>0;......
  • 涉及到 List 集合的查询优化时,通常需要考虑集合的大小、查询的复杂度以及数据访问的模
    Java开发中,当涉及到List集合的查询优化时,通常需要考虑集合的大小、查询的复杂度以及数据访问的模式。以下是一些常见的优化技巧。使用StreamAPI进行并行查询StreamAPI可以很容易地并行化查询操作,这对于大规模数据集的查询非常有用。以下是一个并行查询的示例:importjava.ut......