首页 > 编程语言 >数组的算法

数组的算法

时间:2024-08-07 15:07:36浏览次数:9  
标签:元素 算法 查找 数组 序列 排序

数组的算法

目录


1. 数组排序

  • 冒泡排序:通过重复遍历要排序的数组,比较相邻元素的大小,并在必要时交换它们的位置,直到整个数组排序完成。冒泡排序的时间复杂度为O(n^2),其中n是数组的长度。
  • 选择排序:在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
  • 插入排序:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序)。
  • 快速排序:通过一趟排序将待排记录分隔成独立的两部分,其中一部分的所有记录均比另一部分的所有记录小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。快速排序的平均时间复杂度为O(n log n)。
  • 归并排序:是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。归并排序的时间复杂度也是O(n log n)。

2. 数组查找

  • 线性查找:逐个检查数组中的每个元素,直到找到所需的特定元素为止。线性查找的时间复杂度为O(n)。
  • 二分查找:仅适用于有序数组。通过将数组分成两半,判断所需查找的元素是在左半部分还是右半部分,然后继续在相应的半部分中查找,直到找到所需的元素或确定元素不存在。二分查找的时间复杂度为O(log n)。

3. 数组求和、求最大值和最小值

  • 求和:遍历数组,将所有元素相加得到总和。
  • 求最大值和最小值:遍历数组,通过比较更新最大值和最小值的记录。

4. 数组反转

  • 反转数组即将数组中的元素顺序颠倒。这可以通过交换首尾对应的元素来实现,直到遍历完数组的一半。

5. 数组乱序

  • 乱序算法通常用于打乱数组元素的顺序,如Fisher-Yates洗牌算法(也称为Knuth洗牌算法),它能够在O(n)时间复杂度内将数组打乱。

6. 数组复制

  • 创建一个新数组,然后将原数组中的元素逐个复制到新数组中。

7. 数组去重

  • 遍历数组,使用一个额外的数据结构(如HashSet)来记录已经出现过的元素,从而去除重复元素。

标签:元素,算法,查找,数组,序列,排序
From: https://www.cnblogs.com/416M/p/18347067

相关文章

  • 一维数组
    4.1一维数组目录4.1一维数组4.1.1认识数组数组的定义4.1.2数组的创建及初始化4.1.3遍历数组for循环遍历foreach遍历4.1.4数组作为传参,调用该方法时,是否改变原数组?4.1.5Arrays类4.1.1认识数组数组的定义文字定义:数组是一种数据结构,用于存储多个相同类型的数据。Java......
  • kmp算法模板
    模板//pi代表前缀函数 //pi[i]:s[0~i]的最长匹配真前后缀长度 vecotr<int>pi(str.size()); //求前缀函数 for(inti=1;i<str.size();i++){ intlen=pi[i-1];//前一个值的pilen是我们想要找到的一个长度值 while(len!=0&&str[i]!=str[len]){//不匹配时,......
  • 【数据结构与算法】删除循环队列中第k个元素的算法 C++实现(循环队列+模运算)
    数组a[MaxSize]用作一个循环队列,front指向循环队列中队头元素的前一个位置,rear指向队尾元素的位置。设计删除队列中第k个元素的算法。思路首先,判断kkk是否在有效范围内......
  • 【数据结构与算法】在循环队列中第k个元素之后插入元素的算法 C++实现(循环队列+模运算
    数组a[MaxSize]用作一个循环队列,front指向循环队列中队头元素的前一个位置,rear指向队尾元素的位置。设计在队列中第k个元素之后插入item的算法。思路首先,检查输入的位置k是否在合理的范围内,即1到queueSize(Q)(包含两端)。如果k在这个范围外,那么返回ERROR。然后,计......
  • 算法力扣刷题记录 六十八【131.分割回文串】
    前言回溯章节第六篇。切割问题。记录六十八【131.分割回文串】。一、题目阅读给你一个字符串s,请你将s分割成一些子串,使每个子串都是回文串。回文串指字符串从前读和从后读一样。返回s所有可能的分割方案。示例1:输入:s="aab"输出:[["a","a","b"],["aa","b"]]......
  • Java计算机毕业设计基于协同过滤算法的商品推荐系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在信息爆炸的时代,电商平台上的商品数量呈指数级增长,用户在面对海量商品时往往感到无所适从,难以快速找到符合自身需求和喜好的商品。传统的搜索方式虽......
  • 【NOI】C++算法设计入门之穷举
    文章目录前言一、概念1.导入2.概念二、例题讲解1.简单穷举问题:1015.鸡兔同笼问题问题:1351.买公园门票问题:1016.买小猫小狗问题:1220.买糕点问题:1396.开学大采购?2.嵌套穷举问题:1022.百钱百鸡问题问题:1024.购买文具问题:1249.搬砖问题问题:1250.马克思手稿的问题......
  • JavaScript 数组方法
    JavaScript数组的力量隐藏在数组方法中。把数组转换为字符串JavaScript方法toString()把数组转换为数组值(逗号分隔)的字符串。join()方法也可将所有数组元素结合为一个字符串。它的行为类似toString(),但是您还可以规定分隔符<pid="demo"></p><script>varfruits......
  • 「代码随想录算法训练营」第三十一天 | 动态规划 part4
    1049.最后一块石头的重量II题目链接:https://leetcode.cn/problems/last-stone-weight-ii/题目难度:中等文章讲解:https://programmercarl.com/1049.最后一块石头的重量II.html视频讲解:https://www.bilibili.com/video/BV14M411C7oV/题目状态:看题解过思路:本题本质上就是将......
  • 代码随想录算法训练营第62天 | 最短路径:dijkstra(堆优化版)+ Bellman_ford算法
    47.参加科学大会https://kamacoder.com/problempage.php?pid=1047dijkstra(堆优化版)精讲https://www.programmercarl.com/kamacoder/0047.参会dijkstra堆.html#思路94.城市间货物运输Ihttps://kamacoder.com/problempage.php?pid=1152Bellman_ford算法精讲https://www.pr......