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

原创 2015年07月08日 23:17:47

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

稳定性

放在内存与硬盘分为

内排序的分类

时间复杂度空间复杂度

 


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序

一.希尔(Shell)排序法(又称宿小增量排序,是1959年由D.L.Shell提出来的) /* Shell 排序法 */ #include void sort(int v[],int n) { ...

排序算法汇总(选择排序 ,直接插入排序,冒泡排序,希尔排序,快速排序,堆排序)

=============================================== 作者:rerli 时间:2003-12-15 目的:重温经典排序思想,并用C语言指针实现排序...

排序算法: 冒泡排序, 快速排序,希尔排序,直接插入排序 ,直接选择排序,归并排序,堆排序

几种排序算法分析:     冒泡排序:   冒泡排序的方法排序速度比较慢。   思路:进行n-1排序,第一次排序先找出最小的数字,放在第一个位置,然后在剩余的数字中再找出最小的数字,放在第二个...

Java基础篇之----排序(快速排序、冒泡排序、堆排序、简单选择排序、 希尔排序、直接插入排序)

一 ,直接插入排序 int[] xx = {3, 2, 1, 5, 4, 3, 2}; int xLenth = xx.length; int temp = 0; for(int i=1 ...

C语言实现基本排序算法----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)

//C语言程序----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)//调试成功运行#include "iostream"#include "stdlib.h"#inc...

几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)

最近决定每天学点数据结构与算法,写博客来督促自己继续学习~ 以下的每个排序的写法格式基本按照先介绍基本思想,再描述具体过程,最后是具体代码。关于复杂度等问题后续更新。如有写的不严谨的地方,欢迎指出,...

【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序

这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)