算法之排序算法总结

算法之排序算法总结 | Carrie博客

全部

全部

ps:这里的排序都是从小到大进行排列。

冒泡排序

  • 算法思想:从第一个数开始,将两个相邻的数进行比较,如果前一个数大于后一个数,则互换位置,否则保持不变。这样比较一趟,可以把最大的数放在末尾(根据循环的趟数决定)。依次循环,直到排序完成。
  • 时间复杂度:O(n^2)
  • 大专栏  算法之排序算法总结li>空间复杂度:O(1)

选择排序

  • 算法思想:从待排序的数字中找出最小的数,放在排序数字的最开始,之后依次在未排序的数字中选出最小的数放在已经排序的数字的末尾。
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

快速排序

  • 算法思想:【i表示数组开始下标,j表示数组最后一个元素的下标】可以依赖递归来实现。选取一个基数(可以选取数组的第一个数作为基数),从最后一个数开始遍历,如果小于基数则将该数放在前面(a[i]=a[j,i++);如果大于基数则将该数放在后面(a[j]=a[i],j++);直到i==j,循环结束。之后,将开始下标置为0,结束下标置为i-1;开始下标置为i+1,结束下标置为数组长度-1,来实现递归操作。
  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(1)

基数排序

  • 算法思想:首先,决定好需要排序的位数。将所有需要排序的数的每一位分割,根据各位将待排序的数字进行排列,之后根据百位…
  • 时间复杂度:O(kn)【n表示个数,k表示位数】
  • 空间复杂度:O(r+n)【r表示桶个数】

归并排序

  • 算法思想:

    分解:1.将一个数组分成两个数组。2.循环第一步,直到划分出来的“小数组”只包含一个元素.
    归并:1.将两个有序的数组合并到一个大的数组中。2.从最小的只包含一个元素的数组开始两两合并。此时,合并好的数组也是有序的

  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(n)

计数排序

  • 算法思想:需要临时创建一个数组,该数组的长度由等待排序数据的差决定。将待排序的数与数组的下标相对应,临时数组的值是等待排序的数字中和临时数组下标相等的数据的个数。之后,将临时数组按照数组值将下标一一输出就可完成排序。
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

插入排序

  • 算法思想:从数字列表中依次选取一个数,与已经排序好的数字从最后一个数开始进行比较,如果准备插入的数小于该数,则将该数往后移一个位置,直到准备插入的数大于或等于该数时,将准备插入的数字放入该数的后面。
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

Close

原文地址:https://www.cnblogs.com/liuzhongrong/p/12000095.html

时间: 2024-09-30 09:59:15

算法之排序算法总结的相关文章

【C/C++学院】0907-象棋五子棋代码分析/寻找算法以及排序算法

象棋五子棋代码分析 编译代码报错: 错误 1 error MSB8031: Building an MFC project for a non-Unicode character set is deprecated. You must change the project property to Unicode or download an additional library. See http://go.microsoft.com/fwlink/p/?LinkId=286820 for mo

STL算法之排序算法

STL排序算法通常复杂度坏于线性,且必须要random-access Iterators. 所以,forward_list, list, associative and unordered contains 不提供随机访问迭代器,这些容器不能用排序算法. 但是,forward_list,list提供了成员函数sort,associative contains 自动排序,unordered contains不能排序. 通常,排序元素一次要比保持元素有序要更快.STL提供了不同的排序算法,根据需求选

c/c++ 通用的(泛型)算法 之 只读算法,写算法,排序算法

通用的(泛型)算法 之 只读算法,写算法,排序算法 只读算法: 函数名 功能描述 accumulate 求容器里元素的和 equal 比较2个容器里的元素 写算法 函数名 功能描述 fill 用给定值,覆盖给定的范围的元素 fill_n 用给定值,覆盖给定开始位置后的,n个元素变 back_inserter 在容器末尾插入元素 copy 把容器1指定范围里的值拷贝给容器2,并返回指向容器2最后一个元素的下个元素 replace 用某个值替换掉给定范围的某个值 replace_copy 用某个值替

在Object-C中学习数据结构与算法之排序算法

笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速排序 双路快速排序 三路快速排序 堆排序 总结与收获 参考与阅读 选择排序 选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n2) 的时间复杂度.所以用到它的时候,数据规模越小越好.唯一的好处可能就是不占用额外的内存空间了吧. 1.算法步骤 首先在未排序序列中找到最小(大)元素,存放到排

算法学习-排序算法

数据结构-算法复杂度 时间复杂度 事件频度 一个算法花费的时间与算法种语句的执行次数成正比,哪个算法种语句执行次数多,它花费时间就多. 一个算法中的语句执行次数称为语句频度或时间频度.记为T(n) eg:计算1-100的和 方法一:for循环 T(n) = n + 1 方法二:直接计算 T(n) = 1 时间复杂度 一般情况下,算法中的基本操作语句的重复执行次数时问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n) / f(n) 的极限值为不等于0的常

javascript数据结构与算法--高级排序算法

高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法---- 希尔排序和快速排序. 一:希尔排序: 希尔排序的核心理念是:首先比较距离较远的元素,而非相邻的元素. 基本原理:通过定义一个间隔序列来表示在排序过程中进行比较的元素之间有多远的间隔. 下面我们来看看数组[0,9,1,8,7,6,2,3,5,4] 来使用希尔排序的原理:如下图: 代码分析如下: 1. 执行 "间隔序列=3的步骤" A.

stl_algorithm算法之排序算法

排序算法: 注意:容器中必须重载 op< ,排序中stl标准中要求用小于来进行比较. 7.53.sort //全排序. 7.54.stable_sort //稳定排序.两个或两个以上的相邻且相等的元素是不会进行相对位置的变化的. 7.55.partial_sort //部分排序.会先调用sort得到指定个数的全部排序的结果,而调用sort只是中间过程.结果是 //除了指定个数之外其他的元素该是如何还是如何. 7.56.partial_sort_copy //获得部分排序个数的结果. 7.57.t

数据结构与算法 4:排序算法,选择/插入/冒泡/希尔/快速/归并

[本文谢绝转载,原文来自http://990487026.blog.51cto.com] 排序算法 平均复杂度 冒泡排序    O(n2) 选择排序     O(n2) 插入排序     O(n2) 希尔排序     O(n1.5) 快速排序    O(N*logN) 归并排序     O(N*logN) 堆排序     O(N*logN) 基数排序     O(d(n+r)) 选择排序: [email protected]://990487026.blog.51cto.com~/sort$ c

【每日算法】排序算法总结(复杂度&amp;稳定性)

一.插入排序:稳定,时间复杂度O(n^2) 想象你在打扑克牌,一开始左手是空的,接着右手开始从桌上摸牌,并将其插入到左手的一把牌中的正确位置上.为了找到这个正确位置,我们需要从右到左将它与手中的牌比较,直到找到合适的位置插入.整个过程的特点是,左手的牌是排好序的了. 详见: 插入排序 二.选择排序:不稳定,时间复杂度O(n^2) 每趟从未排序部分选出最小的元素,然后通过交换将其添加到已排序部分中. 详见: 选择排序 三.冒泡排序:稳定,时间复杂度O(n^2) 将待排序的元素看作是竖着排列的"气泡