排序算发
啊基米德
这个作者很懒,什么都没留下…
展开
-
排序算发---计数排序
前面已经记录过插入排序,归并排序,快速排序,堆排序等四种排序。它们都有个共性,就是通过多次比较来得出前后顺序,这种叫做比较排序,当然除此之外也有非比较排序。今天记录的计数排序就是一种非比较排序。算发思想: 有一串数据,如果我们知道每一个元素升序在数组中的第几个,那么我们就知道了升序的结果。而对于如何知道每个元素在数组中的第几个,可以创建一个cout为数组中最大元素值得数组a,初始化都为0,然后遍历数组,没碰到一个元素,以此元素为下标对应的a[元素]++;然后遍历数组a输出对应的索引值,多个就输出多次原创 2021-03-05 10:45:48 · 110 阅读 · 2 评论 -
排序算法--堆排序
堆排序: 与归并排序一样,但不同于插入排序的的是,堆排序时间复杂度为Θ(nlgn)。与插入排序一样但不同于归并排序的是堆排序同样具有空间原址性,任何时候都只需要常数个额外的元素空间存储临时数据。所以堆排序是集合了归并排序和插入排序优点的排序算法。(二叉)堆: 在学习堆排序之前需要了解下堆。此处的堆不是“垃圾收集存储机制”。而是一种堆数据结构。它是一个数组,可以近似的堪称完全二叉树,树上每个节点对应数组中的一个元素。二叉堆又可以分为两种形式:最大堆和最小堆。最大堆(大顶堆)中结点的都要满足:A[P原创 2021-03-02 11:34:03 · 104 阅读 · 0 评论 -
排序算法--快速排序
思想: 和归并排序一样,快速排序也使用了分治的思想,首先拿到一个基准值,把数组中大于基准值的放在一边,小于基准值的放在一边,然后接着把左右两边重复上述操作,直到要排序的子数组中只有一个元素时,此时的数组既是已经排好序的数组。和归并排序区别: 快排和归并排序同时都是使用了分治的想法,并且时间复杂度都是Θ(nlgn)。但是在归并排序,左右两边的数组是排好序的,然后合并,而快排省略了合并的过程,在左右分组的递归的同时进行了合并操作。时间复杂度: Θ(nlgn)C++实现:// test_1.cpp : 此原创 2021-02-25 14:48:14 · 97 阅读 · 0 评论 -
排序算法--归并排序
思想:把一组数组等分,然后把等分后的左右数组都进行排序(同样等分,使用递归知道左右都为一个元素,然后归并一起),然后进行归并在一起。时间复杂度: Θ(nlgn)C++实现:// test_1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include<vector>using namespace std;//归并排序void Merge(vector<int>& list原创 2021-02-24 14:41:08 · 86 阅读 · 0 评论 -
排序算发--插入排序
思想:对于给定的数组,从索引1开始遍历到结束,对于遍历的元素,使用临时变量保存,并且把该元素以前的元素挨个和该元素比较。如果以前的元素数值较大,则该以前的元素位置后移。如果以前元素数值较小,结束比较遍历,并把临时变量的值放入结束位置后一位。**时间复杂度:**Θ(n^2)c++实现:#include <iostream>#include<vector>using namespace std;int main(){ vector<int> intp原创 2021-02-24 11:29:02 · 71 阅读 · 0 评论