算法:排序
常见排序算法
不蛋定
这个作者很懒,什么都没留下…
展开
-
算法:排序:堆排序
题目描述堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。算法复杂度堆排序为不稳定排序最好,最差,平均时间复杂度都为O(nlogn)解题思路构建大顶堆或者小顶堆将数列中元素挨着放到堆顶,然后平衡该堆最终得到排好序的堆升序或降序的区别就是平衡堆时的判断条件是大于还是小于代码实现func heapSort(arr []int) []int { buildHea原创 2021-06-19 17:44:29 · 62 阅读 · 0 评论 -
算法:排序:归并排序
题目描述归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。解题思路将一个数组分为两份,分别排序,然后合并两个有序数组。递归对分割的数组再次进行分割,直到数组中只剩一个元素合并的时候按大小进行顺序合并即可代码实现func mergeSort(arr []int) []int { le原创 2021-06-19 16:51:22 · 63 阅读 · 0 评论 -
算法:排序:插入排序
题目描述插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。算法复杂度插入排序为稳定排序平均复杂度为O(n²)最坏复杂度为O(n²)最好复杂度为O(n)解题思路挨着遍历数列,前边为排好得,后边为未排的取到一个未排序的数,和前一个数比较,前一个数大,将前一个数向后移一位直到前一个数不大于当前未排序的数,将该数插入当前位置重复该步骤n-1次,将全部数归位代码实现f原创 2021-06-10 21:11:45 · 142 阅读 · 0 评论 -
算法:排序:选择排序
题目描述选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。算法复杂度选择算法不稳定最好最坏平均时间复杂度都是O(n²)解题思路默认第一个元素最小,和其他元素做对比,找到最小的,和第一个元素替换除过第一个,找其他元素中最小的,和第二个元素替换以此类推,经过n - 1次排序完成代码实现f原创 2021-06-10 17:43:06 · 59 阅读 · 0 评论 -
算法:排序:冒泡排序
题目描述冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒牌排序为稳定排序(如果a原本在b前面,而a=b,排序之后a仍然在b的前面)平均时间复杂度为:O(n²)最坏时间复杂度为:O(n²)最好时间复杂度为:O(n)空间负责都为O(1)解题思路从头开始比较相邻两元素,如果前边的大,就与后边原创 2021-06-10 17:06:40 · 99 阅读 · 0 评论