美文网首页
内部排序算法总结(时间原因待完善)

内部排序算法总结(时间原因待完善)

作者: 愿你我皆是黑马 | 来源:发表于2021-07-06 23:40 被阅读0次

冒泡

  • 原理:当气泡从水底浮上来的时候,由于压强变小气泡就会越来越大。最终在水面是其最大的时候。

    冒泡排序算法每次从左到右比较,并判断是否需要交换位置(将大的放在右边)。在一次遍历后最大的数将会在最右边。之后对最大的数之外的数重复该操作。直到所有数都排列好。

  • 模版要点:

    1. 工作一般用不上,面试可能会用到
    2. for 第j个气泡 in range(0,气泡长度-第i次排序-1): 这里的-1是因为下面的判断会判断j+1,所以这里需要-1
    def 冒泡排序(气泡列表):
      for 第i次排序 in range(0,气泡列表长度): #表示重复该操作第i次
          for 第j个气泡 in range(0,气泡长度-第i次排序-1): #表示一次具体的遍历换位
              if 气泡列表[第j个气泡] > 气泡列表[第j+1个气泡] :
                      气泡列表[第j个气泡] (交换) 气泡列表[第j+1个气泡]
    

选择

  • 原理:想象一下,如果你把一堆不一样长度的筷子给一个小孩子让他排好,他会怎样做? 大概会把最小的找出来放到一边,然后再找最小的放到后面,就这样一直找下去。

    选择排序就是按照这种依据:通过一次遍历找到最小的值,将最小的值和第一个数据交换位置。然后重复该步骤。

  • 模版要点:

    1. 最小筷子的下标 = 第i次找:是因为每次找的时候第一眼看到的会觉得最小的,之后再刷新这个认识
    2. in range(第i次找 + 1, 一堆筷子的个数): 是因为每次找的时候,前i个已经是找出来了的
    3. if 第i次找 != 最小筷子的下标: 表示实际上最小的不是最开始看到的那第一个
    def 选择排序(一堆筷子):
        for 第i次找 in range(一堆筷子的个数 - 1):
            最小筷子的下标 = 第i次找
            for 比较的第j根筷子 in range(第i次找 + 1, 一堆筷子的个数):
                if 一堆筷子[比较的第j根筷子] < 一堆筷子[最小筷子的下标]:
                    最小筷子的下标 = 比较的第j根筷子
            if 第i次找 != 最小筷子的下标:
                一堆筷子[第i次找](交换)一堆筷子[最小筷子的下标]
    

插入

  • 原理:相当于一副扑克牌,将牌一张一张的放到左手。右手的牌插入到左手的时候,从左到右比较牌的大小,将牌插入到正确位置,使得左手的牌始终有序。
  • 模版要点:
    1. 数组传入的是引用,直接赋值某个下标的改变,对所有时刻都生效
    2. if里面不能break:因为之后要不停的交换位置,才能做到后面的所有数字后移一位
    def 插入排序(桌上的牌):
        for 桌上第i张牌 in range(1,len(桌上的牌)):
            for 左手第j张牌 in range(0,桌上第i张牌):
                if 桌上的牌[左手第j张牌]>桌上的牌[桌上第i张牌]:
                    桌上的牌[左手第j张牌](交换位置)arr[桌上第i张牌]
    

快排

  • 原理:每次取列表中的一个数,将其他数与其比较。小于的放到左边列表、大于的放到右边列表,最后将取出的树放到中间。不停的对左边列表和右边列表做同样的操作。最终得到有序。
    要点:

  • 模版要点:

    1. pass

    递归法模版套路:数据量太大可能导致栈溢出

    
    

    while循环法模版套路:

    
    

希尔排序


指针排序

这是一个特殊场景的排序:将一个有序数组插入到另一个有序数组中。

  • 原理:这里使用相当于上面插入排序的。把被插入的数组当作左手的牌,插入的数组当作桌上的牌。

  • 模版要点:

    1. 具体算法做了一个优化:将被插入的牌的容量扩大,每次从最右边插入
    def 特殊插入排序之指针排序(左手的有序牌,左手牌的长度,桌上的倒序牌,桌上的倒序牌的长度):
      手上最后一张牌的位置 = 左手牌的长度 - 1
        手上最右边的位置 = 桌上的倒序牌的长度 + 左手牌的长度 - 1
      for 桌上的第i张倒序牌 in range(桌上的倒序牌的长度-1):
            if 桌上的倒序牌[桌上的第i张倒序牌]>=左手的有序牌[手上最后一张牌的位置]:
                左手的有序牌[手上最右边的位置]=桌上的倒序牌[桌上的第i张倒序牌]
            else:
              左手的有序牌[手上最右边的位置]=左手的有序牌[手上最后一张牌的位置]
              做插入排序:插入排序初始状态{{{
                  左手牌=左手的有序牌[0-手上最后一张牌的位置-1]的范围
                  插入牌=桌上的倒序牌[桌上的第i张倒序牌]
              }}}
         手上最右边的位置--
    };
    

归并


堆排序


线程阻塞

相关文章

  • 内部排序算法总结(时间原因待完善)

    冒泡 原理:当气泡从水底浮上来的时候,由于压强变小气泡就会越来越大。最终在水面是其最大的时候。冒泡排序算法每次从左...

  • 排序算法详解及OC实现

    今天我们来总结一下经典常用的排序算法。 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而...

  • 八大排序算法总纲

    排序算法分为内部排序和外部排序。??????怎么还有内部的和外部的 内部排序:是指待排序列完全存放在内存中所进行的...

  • Swift的十大经典排序算法总结

    Swift的十大经典排序算法总结 排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排...

  • 数据结构和算法总结

    数据结构和算法总结 一、排序算法 1.1、排序分类 1.内部排序 指将需要处理的所有数据都加载到内部存储器(内存)...

  • 基础排序算法总结

    排序算法分为内部排序和外部排序,而我们经常说的基础排序算法,都是内部排序算法。包括冒泡排序,选择排序,插入排序,快...

  • 排序-冒泡排序

    排序系列传递门 排序—选择排序排序—快速排序排序—插入排序排序-希尔排序(待完善)排序—归并排序(待完善)排序—基...

  • 阿里P8必备Java 知识点:算法、设计模式、语法,你值得拥有!

    排序算法 9 P1:排序算法的分类 排序算法可以分为内部排序和外部排序,在内存中进行的排序称为内部排序,当要排序的...

  • Object-C实现常见十大算法(冒泡、选择、归并、双路、三路.

    我们经常会在时项目使用各种算法,比如排序.排序算法是最基本的算法之一. 排序算法可以分为内部排序和外部排序,内部排...

  • 2019年5月份找工作面试知识点总结

    面试知识点 算法和数据结构 常用算法排序算法各种排序算法的时间复杂度,是否稳定内部排序快速排序 nlgn 不稳定冒...

网友评论

      本文标题:内部排序算法总结(时间原因待完善)

      本文链接:https://www.haomeiwen.com/subject/iabnultx.html