
排序算法
zhen921
这个作者很懒,什么都没留下…
展开
-
排序算法入门——直接插入排序
时间复杂度 · 直接插入排序最好的时间复杂度为O(n)· 直接插入排序的最坏时间复杂度为O(n^2)· 因此直接插入排序总的平均时间复杂度为O(n^2)注:具有稳定性排序原理 虽然给出的排序数字为一个数组或者别的容器,但是排序的时候,就当是顺序给你一个又一个数字,给你一个你排一个(类似于扑克牌,打牌的...原创 2018-05-11 09:51:07 · 3057 阅读 · 1 评论 -
排序算法入门——基数排序
前言 基数排序的排序原理不难理解,但是在算法设计上,个人感觉还是比那些常见的排序要难的,耐心慢慢一步步理解,还是比较容易看懂的,注意基数排序有两种,一种是高位优先,一种是低位优先,在这里我只讲低位优先,即先排个位,再排十位……….时间复杂度· 基数排序的时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数注:比其他的稳定排序原理...原创 2018-05-17 17:33:25 · 18964 阅读 · 11 评论 -
排序算法入门——希尔(shell)排序
涵义· 希尔排序是直接插入排序的改进版,其排序过程中采用的排序依然是插入排序,但是也做了一定优化,使插入排序效率更高。时间复杂度· 直接插入排序最好的时间复杂度为O(n)· 直接插入排序的最坏时间复杂度为O(n^2)· 因此直接插入排序总的平均时间复杂度为O(n^1.3)注:不稳定排序原理相对于插入排序的一...原创 2018-05-12 10:40:37 · 4719 阅读 · 2 评论 -
排序算法入门——选择排序
· 直接选择排序的核心在于在每次遍历过程中找到最大值(或者最小值),外层遍历是为了找到每次遍历的起始位置,在每次遍历结束用于存放每次找到的极值,但是在里层遍历过程中只记录其下标,而后利用交换将最值放置在数组首部或者尾部。 · 选择排序是一种不稳定的排序时间复杂度· 选择排序最好的时间复杂度为O(n^2)· 选择排序的最坏时...原创 2018-05-06 10:24:14 · 223 阅读 · 0 评论 -
时间复杂度表
注:计算的方法是:看看有几重for循环,只有一重则时间复杂度为O(n),二重则为O(n^2),依此类推,如果有二分则为O(logn),二分例如快速幂、二分查找,如果一个for循环套一个二分,那么时间复杂度则为O(nlogn)(摘自百科)...原创 2018-05-06 11:09:47 · 3397 阅读 · 0 评论 -
排序算法入门——冒泡排序
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名“冒泡排序”。时间复杂度· 冒泡排序最好的时间复杂度为O(n)· 冒泡排序的最坏时间复杂度为O(n^2)· 因此冒泡排序总的平均时间复杂度为O(n^2)c++实现如下#include<iostream>#include<string>...原创 2018-05-06 11:28:48 · 866 阅读 · 0 评论 -
排序算法入门——快速排序
涵义· 虽说快速排序是由冒泡排序改进而来,二者都是通过元素交换达到排序效果,但是在个人看来快速排序思想和冒泡完全不同。时间复杂度· 直接插入排序最好的时间复杂度为O(nlog2n)· 直接插入排序的最坏时间复杂度为O(n2)· 因此直接插入排序总的平均时间复杂度为O(nlog2n)注:不稳定 排序原理快...原创 2018-05-15 21:18:36 · 299 阅读 · 0 评论 -
二分查找的理解(java程序举例)
二分查找的解释 二分查找又叫做折半查找,其作用有两个,一是可以高效的查询有序的数列中是否存在要查询的元素以及元素的位置,二是如果要往有序的数列中插入一个数,可以高效的查找到添加位置(但是由于其存储结构是顺序的,因此插入时效率低),由于其查找原理的好处使得二分查找的最坏情况的时间复杂度也为O(log2n),要优于顺序查找,其查找原理稍后用实例解释。需要满足的条件二分查找是...原创 2018-11-04 13:51:01 · 409 阅读 · 0 评论