Golang排序算法-希尔排序
原创 Golang排序算法-希尔排序
什么是希尔排序(Shellsort)希尔排序是插入排序的一种优化算法,先来看百度百科的定义:希尔排序(Shell’sSort)是插入排序的一种又称“缩小增量排序”(DiminishingIncrementSort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因
Golang排序算法-归并排序
原创 Golang排序算法-归并排序
前言归并排序算法是一个O(nlogn)级别的算法。这种算法体现了“分而治之”的算法思想,是一个可以提供使用的工具,意思是,以后遇到新的问题,可以先自问一下:分而治之能解决吗?这一篇,我们先讨论实践这一思想的算法之一:归并排序算法。所谓归并排序算法:是建立在归并操作上的一种有效的排序算法,该算
Golang排序算法-冒泡排序优化之四
原创 Golang排序算法-冒泡排序优化之四
前言上一篇http://www.haodaquan.com/140我们一起讨论了冒泡算法的第三种优化方式:即找出不需要排序的索引,作为内层循环的边界,这次讨论一个冒泡排序的优化变种:鸡尾酒排序法。所谓鸡尾酒排序法:鸡尾酒排序也就是定向冒泡排序,鸡尾酒搅拌排序,搅拌排序(也可以视作选择排序的一
Golang排序算法-冒泡排序优化之三
原创 Golang排序算法-冒泡排序优化之三
前言上一篇http://www.haodaquan.com/139我们一起讨论了冒泡算法的第二种优化方式:提前结束外层循环。并且也加上了第一种优化方式,提前结束内层循环,但是,这种算法对于反序排列的元素(如:9,8,7,6,5,4,3,2,1)排序,效率低下。分析假设:有一个数组[7,1,2
Golang排序算法-冒泡排序优化之一
原创 Golang排序算法-冒泡排序优化之一
前言上一篇:http://www.haodaquan.com/110介绍了冒泡排序算法,如果单纯的背诵算法的代码,那将是一件枯燥的事情,算法的乐趣在于可以不断的优化,不断的提高算法的速度,这是一件很美妙又有挑战的事情。所以,这里我们试图改进冒泡排序,看是否有更优秀的解法。分析对于冒泡算法,目
Golang排序算法-冒泡排序优化之二
原创 Golang排序算法-冒泡排序优化之二
前言上一篇:http://www.haodaquan.com/139介绍了冒泡排序算法的一种优化方法,那就是我们根据冒泡排序的特点,减少了内层循环次数,从而提高了算法的执行速度,那外层循环能否也可以减少一下循环次数呢?分析我们假设m个元素需要排序,当我们进行到i次排序的时候,如果发现内层循环
Golang排序算法-快速排序
原创 Golang排序算法-快速排序
什么是快速排序快速排序简单的说就是选择一个基准,将比起大的数放在一边,小的数放到另一边。对这个数的两边再递归上述方法时间复杂度时间复杂度(平均)时间复杂度(最坏)时间复杂度(最好)空间复杂度稳定性复杂性O(nlog2n)O(n^2)O(nlog2n)O(nlog2n)不稳定较复杂基本思想1、
Golang排序算法-插入排序
原创 Golang排序算法-插入排序
什么是插入排序顺序从序列中取一个数与左侧的元素们做比较,如果左侧的元素比取的数大,就向右移,直到把取的数插入到不小于左侧元素的位置处。此种排序方法类似于你在打扑克牌的时候,整理纸牌顺序的做法。时间复杂度时间复杂度为O(n^2)/********************************
Golang排序算法-冒泡排序简单实现
原创 Golang排序算法-冒泡排序简单实现
什么是冒泡排序冒泡排序是一种稳定的简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。如果上面说的不太明白的话,那请移步一篇老文章:http://www.haodaquan
Golang排序算法-选择排序
原创 Golang排序算法-选择排序
名词解释选择排序,主要针对位置来进行排序的算法。假设对一组10个同学进行排序,排序的标准是其中考试成绩(便于理解,假设成绩没有重复的),按照成绩由低到高排序。老师说:第一个位置的同学(选择位置),你和你后面所有的同学逐个比较成绩,如果你的成绩比该同学高,则你们俩互换位置,然后新的第一位的同学