未来索引
开启左侧

几句话描述简单算法——排序与搜索

[复制链接]
邢远 发表于 2017-3-14 05:45:11 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
一、排序

1)桶排序

准备大量的木桶,用木桶的标号(数组下标)作为数据,按照木桶标号的顺序进行排序。

18f7000f630a38efc23d.jpg

2)选择排序

从“待排序部分”找到最小值(或最大值),让“待排序部分”的起始位置向后移动。

1835001092ee6f4b98ab.jpg

3)冒泡排序

比较相邻的两个数据,把这两个数据按照大小关系正确的交换排列。

1835001092f11a8044d2.jpg

4)插入排序

不断地把数据插入已排序的部分数据列,里面恰当的位置。

18fa0000289c7a9eaca6.jpg

5)归并排序

分两步走,先了解下归并的概念。归并:把“几个已排序的数据列”合并成“一个已排序的数据列”。

1835001092f2dd5c9699.jpg

归并排序由分割和归并两个构成。

18390010964656e160c1.jpg

6)希尔排序

希尔排序就是把数据以一定的间隔进行分组,并且对每个组进行的排序。

18f3000f62bd54da7902.jpg

7)快速排序

从数据列中任意取出一个值P(基准值),再把“>P”和“<P”的值分离出来,得到新的数据列,P在数据列中的最终位置就确定了。

1835001092f4832aff90.jpg
二、搜索

1)线性搜索

线性搜索就是从起始数据开始,按顺序排除,比较每个数据是否与目标数据一致。

18f3000f62c0d9f7c1d3.jpg

2)二分搜索

二分搜索的前置条件是数据列已经排好序。

二分搜索专注数据列中间位置M1,将数据列分为左右部分,如果数据一致就结束;否则缩小范围,在左边或右边数据列重复查找中间位置M2等,直到结束。

18390010964822a20eaa.jpg

3)哈希搜索

1. 创建哈希表,利用哈希函数求得一个哈希值,将哈希值作为下标。

2. 哈希冲突,很有可能会出现哈希值相同,则可以在哈希值中保存一个单项列表(PHP中可以用Array)。

3. 通过哈希值限定到特定的分组里,实现高效搜索。

18f60005329a0e1574ad.jpg

4)字符串搜索

“子字符串是数组(多个数据)”,将子字符串的每个字符和目标字符串中的字符一一比较,如果不匹配,重新匹配,下一次开始匹配的位置,就是在当前位置后移一位。

18f60005329b5c044af5.jpg

5)KMP搜索

KMP算法可以根据子字符串出现不匹配的位置,决定下一次开始比较字符的位置。

18f3000f62c12e56c0a0.jpg

6)BM搜索

BM算法从子字符串的末尾字符开始匹配,根据不匹配的字符和位置信息,决定下一次匹配开始的位置。

18f9000f629aca335005.jpg
该会员没有填写今日想说内容.

精彩评论1

zhcy123 发表于 2017-8-2 21:58:52 | 显示全部楼层
支持一下+1
智能技术共享平台 - 未来论 http://www.mywll.com/
回复

使用道具 举报

高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注2973

粉丝3237

帖子9937

发布主题
阅读排行 更多
广告位
!jz_fbzt! !jz_sgzt! !jz_xgzt! 快速回复 !jz_sctz! !jz_fhlb! 搜索

智能技术共享平台 - 未来论

关注服务号

进入小程序

全国服务中心:

运维中心:天津

未来之家:天津 青岛 济南 郑州 石家庄

                商务邮箱:xy@mywll.com

Copyright © 2012-2021 未来派 未来论 (津ICP备16000236号-5)