好吧 ~~csdn太难用了。。。。尼玛。。。写了半天的也无法弄进去。。。lz正在找更好地博客,or放在github上打算。。
下边是lz自己的有道云分享,大概内容是
http://note.youdao.com/share/?id=62ed43d615aef54455f47b34be190efb&type=note
真心无语了。。。博主的github:
前言
分类
稳定性
时间复杂度
http://blog.csdn.net/jiuyueguang/article/details/12028393
http://blog.csdn.net/frances_han/article/details/6458067
Java实现版本
1、冒泡排序
但是这个有个缺点就是对于 这种的效率很低
2种冒泡改良算法
http://blog.csdn.net/tjunxin/article/details/8711389
双向冒泡
http://blog.csdn.net/tjunxin/article/details/8711389
总结的最好
http://blog.csdn.net/kong357385142/article/details/6343376
java实现方式
正规的冒泡 里边有双向冒泡
2、选择排序
3、直接插入排序
直接插入排序
4、希尔排序
I 1 V 5 X 10
注意 iv 表示的是5-1 等于4
同理 ix 表示的是10-1 等于9
从IX变为VI 从9变为6
IX倒转180° 然后
哈哈
直接插入的那种排序
在这2个情况下效果非常高
希尔排序(缩小增量法) 属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序。希尔排序并不稳定,O(1)的额外空间,时间复杂度为O(N*(logN)^2)。最坏的情况下的执行效率和在平均情况下的执行效率相比相差不多。
第一趟排序为总数的10/2也就是间隔为5
第二趟排序排序为5/2 =3间隔为3
第三趟排序间隔为2
排序完成,也是直接插入排序,但是是多个同时进行直插
希尔排序的思想可以利用在其他排序 但是利用在直插更多
直插的源码
修改直插的希尔排序的源码
Gap是间隔数哈 第一趟间隔多少
5、堆排序
介绍大小顶堆
堆排序是完全二叉树
大顶堆 根节点都大于左右孩子
小顶堆:根节点小于左右孩子
堆排序的算法要点
堆排序算法的实现
这里用大顶堆
调整大顶堆 HeapAdjust
与交换swap 根节点与最后一个元素交换
第一个为字符长度
6、归并排序
递归实现
迭代实现
7、快速排序
代码实现
swap就是交换数组 low high位置的值
快速排序的优化
http://www.2cto.com/kf/201303/196811.html
优化选取基准点
优化Partition
优化前
优化后
优化不必要的交换
还是该Partition
优化前
优化后
优化小数组时的排序方案
数组小的时候直接插入排序
优化递归操作
原来的
优化的
这样就变为尾递归了
再进一步优化
@这一这里相当于方法quickSor在执行一次时,用了while(low < high)这个循环条件,这里就是关键所在
a.第一次进入循环:这个循环执行了一次递归后,然后执行low = pivot + 1;
b.再次进入循环:执行int pivot = partition(low, high, array);,对右端进行递归,因为(low = povit + 1) > (high = povit -1 ),所以后面的quickSort(low, pivot - 1, array);将会终止,然后重复执行a,b;
进一步优化,递归小的,大的通过尾递归搞定
数组越大效果越明显。
8、总结回顾
稳定性
放在内存与硬盘分为
内排序的分类
时间复杂度空间复杂度