算法
文章平均质量分 71
十三亿分之一
这个作者很懒,什么都没留下…
展开
-
归并排序(Python)
归并排序算法思路归并排序遵循分治的思想,将待排序数列分为两个有序子数列,然后合并两个有序子数列为一个完整有序数列,每个子数列也是通过相同的方式变得有序。算法实现合并过程:设置指针 index 指向待排序数列的起始位置,设置两个指针 index_l、index_r 分别指向两个子数列的起始位置。比较 index_l、index_r 所指向的元素,将较小的元素写入 index 指针所指的位置,并将 index 指针以及指向较小数列元素的指针后移。重复步骤 2 知道某一子数列指针到达序列末尾。将原创 2021-01-07 11:11:21 · 413 阅读 · 0 评论 -
选择排序(Python)
选择排序算法思路从待排序数列中选择最小的元素,将它与数列的第一个元素交换位置。再从数列剩下的元素中选择出最小的元素,将它与数组的第二个元素交换位置。不断进行这样的操作,直到将整个数组排序。算法实现设置标志位记录待排序数列中最小元素的下标,每次遍历完成后都将最小元素放在已排序数列的末尾。def selection_sort(arr): arr_len = len(arr) if arr_len < 2: return for i in rang原创 2021-01-07 11:05:01 · 573 阅读 · 0 评论 -
冒泡排序(Python)
冒泡排序1. 算法思路对于待排序数列,将其元素依次两两进行比较,若第一个元素大于第二个元素,将两个元素进行交换,不断遍历待排序数列并重复比较交换操作直至在一趟序列遍历中没有发生元素交换,完成排序。2. 算法实现在经过一次序列遍历后,最后的元素一定是此次遍历序列中最大的数,因此在每次遍历时可以不包含上一次遍历的最后一个元素,去除不必要的以减少程序运行时间。def bubble_sort(arr): arr_len = len(arr) if arr_len < 2:原创 2021-01-07 11:02:17 · 291 阅读 · 0 评论 -
数据结构---双向循环链表(C++)
双向循环链表1.概念1.链表2.双向循环链表2.实现1.概念1.链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域data,另一个是存储下一个结点地址的指针域next。 (怪我自己描述不了,就把百度百科的拿来了)最...原创 2019-03-25 16:52:45 · 829 阅读 · 1 评论 -
快速排序(Python)
快速排序与归并排序一样,快速排序也使用分治思想,下面是对一个数组A[p…r]进行快速排序的三步分治过程:分解: 数组A[p…r]被划分为两个子数组(可能存在空数组)A[p…q-1和]A[q+1…r],使得A[p…q-1]中的每一个元素都小于等于A[q],而A[q]也小于等于A[q+1…r]中的每个元素。其中,计算下标q也是划分过程的一部分。解决: 通过递归调用快速排序,对子数组A[p…q-...原创 2019-01-22 12:07:12 · 179 阅读 · 2 评论 -
堆排序(Python)
堆排序堆堆排序算法(以大顶堆为例)维护堆性质的函数堆排序使用一种被称为堆的数据结构进行排序,时间复杂度为O(nlogn)。堆(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树。树上的每一个结点对应数组中的一个元素。除了最底层外,该树是完全充满的,而且从左向右填充。二叉堆可以分为两种形式:大顶堆和小顶堆大顶堆:每个结点的值都大于或等于其左右孩子结点的值,堆中最大的元素存放在根节点。小顶...原创 2019-01-21 19:45:43 · 228 阅读 · 0 评论 -
插入排序和希尔排序(Python)
插入排序和归并排序插入排序归并排序本文基于&amp;amp;amp;lt;&amp;amp;amp;lt;算法导论&amp;amp;amp;gt;&amp;amp;amp;gt;第二章插入排序对于少量元素排序,插入排序是一个有效的算法.插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。C++代码:void insertionSort(int a[], int s){ int i,原创 2019-01-09 21:08:52 · 835 阅读 · 0 评论 -
线性时间的排序算法
前言在排序的最终结果中,各元素的次序依赖于它们之间的比较。我们把这类排序算法称为比较排序,像归并排序,快速排序等都是如此。任何比较排序的时间复杂度最小为O(nlgn)。计数排序计数排序是通过运算而不是通过比较来确定排序顺序的算法,时间复杂度为O(n)。当然有如此优秀的运算时间自然也有其缺点,否则所有排序直接用计数排序得了。计数排序在运算时占用额外的内存空间,通常只对位数较小的数字排序时使用计...原创 2019-01-24 19:50:23 · 684 阅读 · 0 评论 -
求连续子数组的最大和(C++)
出处:https://www.cnblogs.com/waytofall/archive/2012/04/10/2439820.html问题:数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值及该数组左右边界。思路:设sum[i]为以第i个元素结尾且和最大的连续子数组。假设对于元素i,所有以它前面的元素结尾的子数组的长度都已经...原创 2019-01-12 12:03:01 · 1476 阅读 · 5 评论