基础算法
nope啊
0000
展开
-
基础排序算法之堆排序
基本思想(默认升序):利用二叉树中的最大堆,每一个结点都比其所有子结点的值大的特点,第一个结点的值最大,将第一个结点与最后一个结点交换,这样最后一个结点肯定是最大的,然后对前n-1个元素 重新进行构造最大堆,再重复上述步骤; 平均时间复杂度: O(N log N); demo: #include<iostream> #include<vector> using na...原创 2019-11-14 23:29:08 · 83 阅读 · 0 评论 -
基础排序算法之基数排序
基本思想:桶排序的改进版, 申请的桶的内存大小固定为10,减少内存开销; 因为是十进制,所以每一个数值的个,十,百等中的一位,范围都是0 - 9; 如 15, 分为 个位的 5 和 十位的 1; 过程: 分配一个大小为10 的数组bucket,首先遍历源数列src中的数值的个位,在bucket中记录下数列src的每一个个位 数值的个数;再合计,最后依次放入...原创 2019-11-14 23:23:42 · 120 阅读 · 0 评论 -
基础排序算法之桶排序
基础思想: 线性排序,数组下标 表示元素的值,遍历数组即可得到有序的数列; #include<iostream> #include<vector> using namespace std; //桶排序 时间复杂度 O(x * n) /* 实现线性排序,遍历取得数列中元素的最大值max,申请大小为max的内存空间buf,然后数列中的元素的值-1, 对应着buf中...原创 2019-11-14 23:15:05 · 147 阅读 · 0 评论 -
基础排序算法之快速排序
基础思想:分治; 选首元素作为key值,循环比较,比其小的元素放左侧,比其大的放右侧; 分成的两个数列,递归重复上述步骤; #include<iostream> #include<vector> using namespace std; //快速排序 时间复杂度 O(n*log n) /* 从数列取一个数作...原创 2019-11-14 23:09:15 · 70 阅读 · 0 评论 -
基础排序算法之希尔排序(插入排序改进版)
#include<iostream> #include<vector> using namespace std; //希尔排序 时间复杂度 O(n^1.5) /*插入排序的改进版。为了减少数据的移动次数,在初始序列较大时取较大的步长,通常取序列长度的一半, 此时只有两个元素比较,交换一次;之后步长依次减半直至步长为1,即为插入排序, 由于此时序列已接近有序,故插入元素时...原创 2019-11-14 22:47:53 · 129 阅读 · 0 评论 -
基础排序之插入排序
主要思想:将数列分为前后两部分,前一部分有序,后一部分无序, 依次将后面无序的序列中的值插入前面有序的序列中;初始时前面有序序列就是首元素; 实现依旧是两个嵌套的循环。 时间复杂度: O(N^2); demo: #include<iostream> #include<vector> using namespace std; //插入排序 时间复杂度 O(n^...原创 2019-11-14 22:39:06 · 83 阅读 · 0 评论 -
基础排序算法之选择排序
主体: 遍历,找到最小元素,记录索引,遍历完后将最小元素与首元素交换; 时间复杂度: O(N^2); 过程: 两个循环,外循环从前往后遍历每一个元素,内层循环找到子序列中的最小值的索引,并将最小值与子序列的首元素值交换; 选择 --》 选择最小索引; demo: #include<iostream> #include<vector> using namespa...原创 2019-11-14 22:28:45 · 74 阅读 · 0 评论 -
基础排序算法之冒泡排序
1.主体: 两个循环; 2.时间复杂度: O(N^2); 3.过程: 对于升序,比较相邻两个数,如果第二个数小,则交换位置; 从数列后往前比较,最终第一个数是最小的; 重复上述步骤; demo: #include<iostream> #include<vector> using namespace std;...原创 2019-11-14 22:19:32 · 80 阅读 · 0 评论