文档章节

程序员必知8大排序3大查找(一)

SuShine
 SuShine
发布于 2015/06/25 15:27
字数 1164
阅读 9
收藏 0

第二篇《程序员必知8大排序3大查找(二)》

《程序员必知8大排序3大查找(三)》

每天都在叫嚣自己会什么技术,什么框架,可否意识到你每天都在被这些新名词、新技术所迷惑,.NET、XML等等技术固然诱人,可是如果自己的基础不扎实,就像是在云里雾里行走一样,只能看到眼前,不能看到更远的地方。这些新鲜的技术掩盖了许多底层的原理,要想真正的学习技术还是走下云端,扎扎实实的把基础知识学好,有了这些基础,要掌握那些新技术也就很容易了。

 

要编写出优秀的代码同样要扎实的基础,如果排序和查找算法学的不好,怎么对程序的性能进行优化?废话不多说,本文要介绍的这些排序算法就是基础中的基础,程序员必知!


1、直接插入排序

 

1)基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排

好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数

也是排好顺序的。如此反复循环,直到全部排好顺序。

2)实例


 

2、希尔排序(也称最小增量排序)


1)基本思想:算法先将要排序的一组数按某个增量dn/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。

2)实例:



3、简单选择排序


1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;

然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

2)实例:



4、堆排序


1)基本思想:堆排序是一种树形选择排序,是对直接选择排序的有效改进。

堆的定义如下:具有n个元素的序列(h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1)(i=1,2,...,n/2)时称之为堆。在这里只讨论满足前者条件的堆。由堆的定义可以看出,堆顶元素(即第一个元素)必为最大项(大顶堆)。完全二叉树可以很直观地表示堆的结构。堆顶为根,其它为左子树、右子树。初始时把要排序的数的序列看作是一棵顺序存储的二叉树,调整它们的存储序,使之成为一个堆,这时堆的根节点的数最大。然后将根节点与堆的最后一个节点交换。然后对前面(n-1)个数重新调整使之成为堆。依此类推,直到只有两个节点的堆,并对它们作交换,最后得到有n个节点的有序序列。从算法描述来看,堆排序需要两个过程,一是建立堆,二是堆顶与堆的最后一个元素交换位置。所以堆排序有两个函数组成。一是建堆的渗透函数,二是反复调用渗透函数实现排序的函数。

2)实例:

初始序列:46,79,56,38,40,84

建堆:


交换,从堆中踢出最大数


剩余结点再建堆,再交换踢出最大数


依次类推:最后堆中剩余的最后两个结点交换,踢出一个,排序完成。

 

5、冒泡排序


1)基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

2)实例:



未完待续,第二篇将介绍剩余3大排序,排序稳定性,复杂度(这句话过期,呵呵!)


第二篇杀到,《程序员必知8大排序3大查找(二)》

希望大家多多支持!

本文转载自:http://blog.csdn.net/sfshine/article/details/8764215

共有 人打赏支持
SuShine
粉丝 126
博文 562
码字总数 154303
作品 0
朝阳
后端工程师
私信 提问
JAVA基础学习总结(算法篇)

1、排序算法 关于排序算法我就不一一赘述了,建议看下这篇博客,讲的很详细。http://blog.csdn.net/hguisu/article/details/7776068 常用的排序一般是冒泡排序和快速排序。 冒泡排序的基本思...

tomcater
2016/04/13
100
0
第二十四节:Java语言基础-讲解数组的综合应用

数组的综合应用 数组转字符串 选择排序 选择排序是第一个人和后续排序的人进行比较,若第一个人大于第二个人,就进行交换,那么这时第一人就是最小的,然后这时的第一个人和第三个人进行比较...

达叔小生
2018/08/10
0
0
程序员必知的8大排序(java实现)

8种排序之间的关系:  1、 直接插入排序   (1)基本思想:   在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好...

小帅帅丶
2015/01/09
0
7
5本数据库经典之作,没看过的都白学了!

  【IT168 评论】1、 《数据库系统实现》   内容简介:书中对数据库系统实现原理进行了深入阐述,并具体讨论了数据库管理系统的三个主要成分――存储管理器、查询处理器和事务管理器的实...

it168网站
2017/11/13
0
0
学习Python必去的8个网站!

作为一个现时代的程序员初学者,除了看书之外,互联网的学习手段也是断不能少的! 以下这些网站,虽说不上全方位的满足你的需求,但是大部分也都能! 0.国外的大神GitHub : https://github...

W3Cschool
2018/06/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
53分钟前
0
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
8
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
4
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部