关闭

java版排序算法简介及冒泡排序以及优化,选择排序,直接插入排序,希尔排序,堆排序,快速排序及其优化前言 2 分类 2 稳定性 3 时间复杂度 4 Java实现版本 5 1、冒泡排序 6 2、选择排序

标签: 数据结构排序算法
525人阅读 评论(0) 收藏 举报
分类:

好吧 ~~csdn太难用了。。。。尼玛。。。写了半天的也无法弄进去。。。lz正在找更好地博客,or放在github上打算。。

下边是lz自己的有道云分享,大概内容是

http://note.youdao.com/share/?id=62ed43d615aef54455f47b34be190efb&type=note   

真心无语了。。。博主的github:

https://github.com/wbzj1110/

前言... 2

分类... 2

稳定性... 3

时间复杂度... 4

Java实现版本... 5

1、冒泡排序... 6

2、选择排序... 9

3、直接插入排序... 10

4、希尔排序... 12

5、堆排序... 16

介绍 大小顶堆... 16

堆排序的算法要点... 19

堆排序算法的实现... 19

6、归并排序... 21

递归实现... 23

迭代实现... 24

7、快速排序... 25

代码实现... 25

快速排序的优化... 27

优化选取基准点... 27

优化不必要的交换... 29

优化小数组时的排序方案... 30

优化递归操作... 31

8、总结回顾... 34

9、... 35

10、... 36

11、... 36

12、... 36

 

前言

分类

稳定性

时间复杂度

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、总结回顾

稳定性

放在内存与硬盘分为

内排序的分类

时间复杂度空间复杂度

 


0
0

  相关文章推荐
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5647次
    • 积分:134
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:6篇
    • 译文:0篇
    • 评论:1条
    最新评论