常见算法——查找与排序
查找算法
基本查找
二分查找/折半查找
分块查找
普通分块查找
乱序中透露着有序
块内无序,块与块之间有序(一个块前面的块的最大值小于它的最小值,后面的块反之)
块数数量一般等于数据个数的平方根,比如16个数字分为4块
核心思路:先确定要查找的元素在哪一块,然后在块内挨个查找
步骤: 1、创建数组blockArr存放每一块对象的信息 2、先查找blockArr确定要查找的元素在哪一块 3、在对应的块内挨个查找
扩展的分块查找
1、无规律的数据
2、各个块之中没有交集就可以
排序算法
冒泡排序
相邻数据两两比较,小的放前面,大的放后面
第一轮循环结束,找到最大值
第二轮循环只要在剩余的元素(比第一轮少循环一次)找次大值就可以了,以此类推
选择排序
从0索引开始,跟后面的元素依次比较,小的放前面,大的放后面
第一轮结束,最小的数据确定
第二轮从1索引开始,以此类推。
插入排序
将0索引的元素到N索引的元素看做是有序的,把N+1索引的元素到最后一个当成无序的。
遍历无序的数据,将遍历到的元素插入有序序列中适当的位置,如遇到相同数据,插在后面。
N的范围:0~最大索引
在无序的数据中从前往后取数据,跟有序序列中的数据从后往前(也就是从大到小)进行比较
快速排序
第一轮:把0索引的数字作为基准数,确定基准数在数组中正确的位置
比基准数小的全部都在左边,比基准数大的全部在右边。
第一轮:把1索引的数用start指向它,最后的数用end指向;end找比基准数小的数,找到一个之后,start开始找比基准数大的数,找到之后end指向的数与start指向的数换位置,之后再动end以此类推;直到end和start指向同一个数,就让0索引这个基准数与它换位置。