首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

STL 选择、插入排序

选择排序则是先假设一个为最小值,然后用这个值和后面所有的内容一一进行比较大小,每轮进行一次交换。选择排序是先确定位置,在找值。 他们的优点都是比较简单,但是缺点也都很明显,时间复杂度是O(n^2)。...选择排序还会破环原来顺序的稳定性(即 有相同值时,通过选择排序相同值的前后顺序会被破坏)。...二、插入排序 插入排序就像我们打打牌时,手里的牌是已经排序好的,起一张新的牌插入到已有的有序牌中的适当位置,为了给要插入的元素腾出空间,需要讲其余大于要插入值的元素,在插入前都向右移动一个位置。...插入适合的应用场景:对非随机的(即有序的)队列进行插入,效率非常高。...、插入排序、冒泡排序、快速排序以及堆排序的原理和实现。

61200

选择、插入排序、sort

#音视频开发之旅(26) 算法系列## 目录 选择排序 插入排序 STL中sort的实现 资料 收获 这一篇我们一起来学习实践下选择排序和插入排序,然后再一起分析下CPP的STL中排序算法的实现,结束排序算法的阶段...选择排序则是先假设一个为最小值,然后用这个值和后面所有的内容一一进行比较大小,每轮进行一次交换。选择排序是先确定位置,在找值。 他们的优点都是比较简单,但是缺点也都很明显,时间复杂度是O(n^2)。...选择排序还会破环原来顺序的稳定性(即 有相同值时,通过选择排序相同值的前后顺序会被破坏)。...二、插入排序 插入排序就像我们打打牌时,手里的牌是已经排序好的,起一张新的牌插入到已有的有序牌中的适当位置,为了给要插入的元素腾出空间,需要讲其余大于要插入值的元素,在插入前都向右移动一个位置。...插入适合的应用场景:对非随机的(即有序的)队列进行插入,效率非常高。

44210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    冒泡排序,选择排序,插入排序,折半插入排序

    今天我们来聊聊简单算法:冒泡,简单选择,直接插入 1.冒泡排序: 冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录的为止,这里的反序指的是不符合当前指定排序规则的数字...如果内存循环里面没有进行交换操作,表示当前数组已经有序,那么退出内存循环的时候,flag仍为假,此时不满足外层循环条件,退出外层循环,数组排好序 选择排序 冒泡排序的思想就是不断在交换,通过交换完成最终的排序...,而选择排序不断进行比较而非交换操作,最终找到最小值后,赋值给当前i对应的值,相当于省去了交换的时间损耗 //简单选择排序 void SelectSort(int arr[], int len) {...直接插入排序就是将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数增1的有序表 //直接插入排序----升序 void InsertSort(int arr[], int len) {...arr[j + 1] = arr[j]; } //最后将temp插入到合适的位置 arr[j + 1] = temp; } } } 降序版本 //直接插入排序----升序

    31040

    各种选择+冒泡+插入排序图解

    ---- 选择排序: 文字描述:对一个序列A中的元素A[1]~A[n],令i从1到n枚举,进行n趟操作,每趟从待排序部分【i,n】中选择最小的元素,令其与待排序部分的第一个元素A[i]进行交换,这样元素...  第6趟:97与76交换:12 27 38 49 65 76 97 完成 C代码: void SelectSort(RecordType r[], int length) /*对记录数组r做简单选择排序...: 文字描述过程: 第1趟插入:将第2个元素插入前面的有序子序列,此时前面只有一个元素,当然是有序的 第2趟比较:将第3个元素插入前面的有序子序列,前面的2个元素是有序的 .........,需要把第i个元素插入到前面的i-1个元素中,该算法总是从i-1个元素开始逐个比较之前的每个元素,直到找到第i个元素的插入位置,这显然没有利用前面0~i-1个元素已经有序的特点。...优化:在0~i-1个有序元素给第i个元素寻找插入的位置时,使用二分查找法可以有效提高查找插入位置的时间效率,经过优化的插入排序称为折半插入排序 ---- 折半插入排序: Java代码: public static

    51220

    #算法基础#选择和插入排序

    算法是基础,小蓝同学准备些总结一系列算法分享给大家,这是第二篇《选择和插入排序》,非常赞!希望对大家有帮助,大家会喜欢!...系列文章: 由快速排序到分治思想 一、选择排序 这是一种最简单的排序算法 第一步他先找到数组中最小的元素,然后将它和本数组中第一个元素交换位置。然后把剩下的n-1个数算为一个数组。...exch(a, i, min); //交换 } } } 特性: 时间复杂度:N² 空间复杂度:N 多索引的稳定性:不稳定 应用: 程序员的日常 二、插入排序...而插入排序的特点就和抓牌时候是一样一样的。 你先从一大堆数组中抓起一个 然后再抓起一个按大小排序。在抓起一个按大小插进去 。。。。。。。。。。。好了 你手上就是一个理好的牌(数组)了。...这就是插入排序。就是这么简单。

    72760

    技术路线的选择重要但不具有决定性

    我们经常能看到基本功差不多的两个人,一个发展的很好,一个发展平平,这表明基本功是职业生涯的是重要条件,但不是决定因素。...3.虽然技术路线的选择不是核心竞争力,也不应该具有决定性, 但对于个人职业路线还是具有比较重要的影响力。...现在回过头看,其实当时无论你选择那条路,如果认真做下去,搞些实事,别玩虚活的话,现在都应该有成就了。...当然,客观上来说,这几年技术变化是比较快,弯弯绕得比较多,相比之下,如果当时你选择的是Java,可能这几年过的比较幸福一些,这是事实。...以上几点,如果有人现在要选择技术路线,可以参考一下。但切记,技术路线的选择重要,但不具有决定意义。

    49820

    概述-服务

    Introduction CodeIgniter中的所有类均作为“服务”提供。这仅意味着,要对要调用的类进行硬定义,而不是对要加载的类名称进行硬编码,而是在一个非常简单的配置文件中定义它们。...最简单的方法就是创建该类的新实例: $timer = new \CodeIgniter\Debug\Timer(); 这很棒。直到您决定要使用其他计时器类代替它。...single_service()工作原理类似,service()但返回类的新实例: $logger = single_service('logger'); 定义服务 为了使服务正常运行,您必须能够依赖具有恒定API或接口才能使用的每个类...几乎所有CodeIgniter的类都提供了它们遵循的接口。当您要扩展或替换核心类时,只需要确保满足接口的要求并且知道这些类是兼容的即可。...但是,如果开发人员需要,我们希望开发人员可以选择更改该路径。因此,该类接受$viewPath 作为构造函数参数。

    1.7K10

    技术路线的选择重要但不具有决定性

    我们经常能看到基本功差不多的两个人,一个发展的很好,一个发展平平,这表明基本功是职业生涯的是重要条件,但不是决定因素。...3.虽然技术路线的选择不是核心竞争力,也不应该具有决定性, 但对于个人职业路线还是具有比较重要的影响力。...现在回过头看,其实当时无论你选择那条路,如果认真做下去,搞些实事,别玩虚活的话,现在都应该有成就了。...当然,客观上来说,这几年技术变化是比较快,弯弯绕得比较多,相比之下,如果当时你选择的是Java,可能这几年过的比较幸福一些,这是事实。...以上几点,如果有人现在要选择技术路线,可以参考一下。但切记,技术路线的选择重要,但不具有决定意义。

    52850

    【排序篇】插入排序与选择排序

    1.2 排序的应用场景 排序的应用场景非常广泛,任何邻域都存在竞争,只要存在竞争就会有比较,那么就有了高低之分了,比如高校排名: 1.3 常见的排序算法 插入排序 直接插入排序 希尔排序 选择排序...选择排序 堆排序序 交换排序 冒牌排序 快速排序 归并排序 归并排序 2.常见排序算法的实现 2.1 插入排序 2.1.1 基本思想 直接插入排序是一种简单的插入排序算法,其基本思想为: 把待排序的数据按其关键码值的大小逐个插入到一个已经排好序的有序个体中...2]的排序码顺序进行比较,找到插入位置便将array[i]插入,原来位置的元素顺序后移。...2.2.2 直接选择排序 在元素集合array[i]—array[n-1]中选择关键码最大/小的数据元素。...回答:堆排序的本质是选择排序,每次都要选择一个最大的数到数组的最后一位,那么问题就变成了如何选择最大的数到数组最后一位,要找出堆中最大数就必须要用到大堆,因为大堆中最大的数就在堆堆顶,通过一次次的选择就可以将数组排序

    10310

    【排序】插入排序与选择排序详解

    选择排序是什么? 选择排序是一种简单直观的排序算法。...… 代码: 上方观察: 选择要找几次? 6个数,一次选择1个,然后有序,第五次选择,5个都有序,最后一个有序。 n个数,选择n-1次,最后一个自然有序。...第一趟选择,下标范围是[0 ~ n-1] 第一趟选择,下标范围是[1 ~ n-1] 第一趟选择,下标范围是[2 ~ n-1] . . . void Swap(int* px, int* py)...直接选择排序的特性总结: 直接选择排序思考非常好理解,但是效率不是很好。...时间复杂度:O(N^2) 空间复杂度:O(1) 稳定性:不稳定 插入排序 直接插入排序是一种简单的插入排序法,其基本思想是:**把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中

    14910

    手搓排序算法:插入排序、选择排序

    插入排序 直接插入排序 时间复杂度最差:大的数据都在左边,小的数据在右边,随着有序区间增大,交换次数增多 时间复杂度最优:小的数据在左边,大的数据在右边。...直接插入排序,通过构建有序序列,对于为排序的数据,在已排序的序列,从后向前寻找到适合位置插入。...3 4 5 8 希尔排序 希尔排序,是在直接插入算法的基础上进行优化的排序算法,通过增量序列来提高算法性能。首先对数据进行预排序,将小的数据在左边,大的数据在右边,使直接插入排序的时间复杂度最优。...选择排序 每⼀次从待排序的数据元素中选出最小(或最大)的⼀个元素,存放在序列的起始位置,直到全部待 排序的数据元素排完 直接选择排序 通过两个指针向后遍历,begin指针从第一个位置开始,mini指针负责遍历...将单向排序的直接选择排序算法,优化为双向的排序算法。begin当为数组的起始位置,end为数组的结束位置,从两头向中间靠拢,当end <= begin时跳出循环结束排序。

    6810

    C++经典算法题-选择、插入、气泡排序

    33.Algorithm Gossip: 选择、插入、气泡排序 说明 选择排序(Selection sort)、插入排序(Insertion sort)与气泡排序(Bubble sort)这三个排序方式是初学排序所必须知道的三个基本排序方式...解法 选择排序 将要排序的对象分作两部份,一个是已排序的,一个是未排序的,从后端未排序部份选择一个最小值,并放入前端已排序部份的最后一个,例如: 排序前:70 80 31 37 10 1 48 60 33...插入排序 像是玩朴克一样,我们将牌分作两堆,每次从后面一堆的牌抽出最前端的牌,然后插入前面一堆牌的适当位置,例如: 排序前:92 77 67 8 6 84 55 85 43 67 [77 92] 67...8 6 84 55 85 43 67 将77插入92前 [67 77 92] 8 6 84 55 85 43 67 将67插入77前 [8 67 77 92] 6 84 55 85 43 67 将8插入...:\n"); printf("(1)选择排序\n(2)插入排序\n(3)气泡排序\n:"); scanf("%d", &i); switch(i) {

    63210

    【数据结构】排序——插入排序,选择排序

    1.2排序的常见算法 2.插入排序 即冒泡排序外,我们来认识一下一个新的排序 直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中...,直到所有的记录插入完为 止,得到一个新的有序序列 。.../ sizeof(arr[0]); i++) { printf("%d ", arr[i]); } return 0; } 这个排序的时间复杂度O(N)为N^2,但相比冒泡效率还是快的 3.选择排序...选择排序其实思路特别简单,通过最前面与最后面的指针进行遍历找到最大的与最小的,将最小的与开头的数交换,最大的与最后面的数交换,再两边指针减减,重复此过程 #define _CRT_SECURE_NO_WARNINGS...选择排序的时间复杂度也是O(N^2)但是比效率比冒泡还要低,综上三个排序,插入排序目前最优 结束语 这篇博客先介绍三个排序,与之前的冒泡排序已经有四个,但这些还都是太慢,其中之一的插入排序一定要好好掌握

    8310
    领券