#插入排序definsert_sort(alist):foriinrange(1,len(alist)):#从第二个位置,即下标为1的元素开始向前面的有序数列插入forjinrange(i, 0, -1):#反向循环前面的有序数列,#从第i个元素开始向前比较,如果小于前一个元素,交换位置ifalist[j] < alist[j - 1]: alist[j], alist[j- 1] = alist[j...
一、冒泡排序 基本介绍: 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前向后移动,就像水底下的气泡一样逐渐往上冒。 注意优化:因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,...
冒泡排序 O(n²) O(1) 稳定 小规模数据或几乎有序的数据 选择排序 O(n²) O(1) 不稳定 数据量小且对稳定性无要求 插入排序 O(n²) O(1) 稳定 小规模数据或几乎有序的数据 归并排序 O(n log n) O(n) 稳定 大规模数据需要稳定性的场景 快速排序 O(n log n) O(log n) 不稳定 大规模...
1. 插入排序 思路: 默认为第一个元素自己是有序的,从第二个元素开始。 取出第二个元素tmp,往前进行比较。 若该元素比tmp大,则将该元素往后移一位,直到找到比tmp小的。 找到比tmp小于等于的元素后,tmp插入到该元素的下一位。 循环2~4步骤。步骤具体实现: ...
1、冒泡排序 冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作就是重复地进行直到不需要再进行交换为止,也就是说该数列已经排序完成。这个算法的名字由来就是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
冒泡排序、插入排序、选择排序 O(n^2) 快速排序、归并排序 O(nlogn) 计数排序、基数排序、桶排序 O(n) 如何分析一个“排序算法” <1>算法的执行效率 1. 最好、最坏、平均情况时间复杂度。 2. 时间复杂度的系数、常数和低阶。 3. 比较次数,交换(或移动)次数。
数据结构和算法学习汇总[https://www.jianshu.com/p/72b20d1e06e6] 本文主要讲述了常见的各种排序方法,通过简单的排序方法的解读来提高算法思...
八大排序算法包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序和计数排序。冒泡排序通过相邻元素比较并交换,逐步将最大值冒泡到最后。选择排序每次选择未排序部分的最小元素放到已排序部分末尾。插入排序将未排序元素插入已排序部分正确位置。希尔排序改进了插入排序,通过增量分组进行插入排序。归并排...
归并排序 快速排序,堆排序都用到了二叉树的高度是log(n)。归并排序也是如此。 假设原始数据长度为n,归并排序先将数据一分为2,长度分别是n/2。然后对子数组继续二分,直到每个数组长度为1。然后对数组两两进行归并和排序,直到恢复原始数据长度。如下图所示。 image.png 上图中,首先对数据进行二分,直到子数组长度...
递归法 和冒泡的一个原理,但是地址要+1 优化策略 遍历找最小和最大,最小放左边、最大大放右边。 比如在循环中 递归:去while,在后加 插入算法 在左边构建有序序列,从第二个元素开始,把未排序数据在已排序序列中从后往前扫描,找到适合位置插入(类似斗地主发完牌后的排牌) ...