数据结构与算法
数据结构和算法
dulang2015
这个作者很懒,什么都没留下…
展开
-
查找算法系列06-分块查找
分块查找简介实现(java)时间复杂度1.分块查找简介分块查找, 按块有序查找, 块间有序, 块内不必有序. 创建索引表, 先查找索引表找到块, 再块内查找元素2.实现(java)public class BlockSearch { public static void main(String[] args) { int[] arr = {40, 35, 5, 63, 21, 82, 96, 77, 52, 19}; int index = sear.原创 2020-06-08 12:44:52 · 469 阅读 · 0 评论 -
查找算法系列05-哈希查找
哈希查找简介实现(java)时间复杂度1.哈希查找简介哈希查找, 构建哈希表再查找, 查找到开放单元或者循环回到原位置则查找失败构造哈希函数的方法: 直接定址法\平方取中法\数字分析法\折叠法\随机函数法\除留余数法哈希冲突解决方法: 开放定址法(线性探测\二次探测)\再哈希法\链地址法\公共溢出区2.实现(java)public class HashSearch { public static void main(String[] args) { int[.原创 2020-06-08 11:53:14 · 180 阅读 · 0 评论 -
查找算法系列04-斐波那契查找
斐波那契查找简介实现(java)时间复杂度1.斐波那契查找简介有序表查找, 扩展数组, 令长度为f(k)-1, 则中间元素将数组分为f(k-1)-1和f(k-2)-1的2部分, 与中间元素比较, 比中间元素小, 在左半区域查找, 比中间元素大, 在右半区域查找数组必须有序斐波那契数列, 从第三个元素开始, 是前2个元素之和, 前后2个元素的比值越来越接近黄金分割点(0.618)2.实现(java)public class FibonacciSearch { public s.原创 2020-06-08 11:41:21 · 121 阅读 · 0 评论 -
查找算法系列03-插值查找
插值查找简介实现(java)时间复杂度1.插值查找简介有序表插值, 与自适应中间元素比较, 比中间元素小, 在左半区域查找, 比中间元素大, 在右半区域查找数组必须有序2.实现(java)public class InsertSearch { public static void main(String[] args) { int[] arr = {5, 19, 21, 35, 40, 52, 63, 77, 82, 96}; int index .原创 2020-06-08 11:23:55 · 141 阅读 · 0 评论 -
查找算法系列02-二分查找
二分查找简介实现(java)时间复杂度1.二分查找折半查找, 与中间元素比较, 比中间元素小, 在左半区域查找, 比中间元素大, 在右半区域查找数组必须有序2.实现(java)public class BinarySearch { public static void main(String[] args) { int[] arr = {5, 19, 21, 35, 40, 52, 63, 77, 82, 96}; int index = sear.原创 2020-06-08 11:15:25 · 123 阅读 · 0 评论 -
查找算法系列01-顺序查找
顺序查找简介实现(java)时间复杂度1.顺序查找简介遍历元素, 依次比较2.实现(java)public class SequenceSearch { public static void main(String[] args) { int[] arr = {40, 35, 5, 63, 21, 82, 96, 77, 52, 19}; int index = search(arr, 82); if(-1 != index) { .原创 2020-06-08 11:03:38 · 194 阅读 · 0 评论 -
排序算法系列10-基数排序
基数排序简介实现(java)复杂度和稳定性1.基数排序简介非比较排序, 从个位开始, 分配, 收集, 逐位进行计数排序, 桶排序的一种实现2.实现(java)public class RadixSort { public static void main(String[] args) { int[] arr = {40, 35, 5, 63, 21, 82, 96, 77, 52, 19}; System.out.println("原数组: " + .原创 2020-05-26 14:39:44 · 113 阅读 · 0 评论 -
排序算法系列09-桶排序
桶排序简介实现(java)复杂度和稳定性1.桶排序简介非比较排序, 分治的思想, 划分几个大小相同的桶, 每个桶自排序, 再合并所有的桶2.实现(java)public class BucketSort { public static void main(String[] args) { int[] arr = {40, 35, 5, 63, 21, 82, 96, 77, 52, 19}; System.out.println("原数组: " + .原创 2020-05-26 14:22:07 · 164 阅读 · 0 评论 -
排序算法系列08-计数排序
计数排序简介实现(java)复杂度和稳定性1.计数排序简介非比较排序,空间换时间, 开辟额外的空间, 统计每个元素出现的次数, 从而确定位置, 一种特殊的桶排序2.实现(java)public class CountSort { public static void main(String[] args) { int[] arr = {40, 35, 5, 63, 21, 82, 96, 77, 52, 19}; System.out.println.原创 2020-05-26 13:23:50 · 123 阅读 · 0 评论 -
排序算法系列07-归并排序
归并排序简介实现(java)复杂度和稳定性1.归并排序简介合并排序, 使用分治的思想, 递归用中间索引分解数组, 再合并2个有序数组2.实现(java)public class MergeSort { public static void main(String[] args) { int[] arr = {40, 35, 5, 63, 21, 82, 96, 77, 52, 19}; System.out.println("原数组: " + Arr.原创 2020-05-11 13:10:00 · 164 阅读 · 0 评论 -
排序算法系列06-堆排序
堆排序简介实现(java)复杂度和稳定性1.堆排序简介选择排序, 构造大顶堆, 选出对顶元素, 交换数组末尾元素和堆顶元素, 剩余元素再构造大顶堆2.实现(java)public class HeapSort { public static void main(String[] args) { int[] arr = {40, 35, 5, 63, 21, 82, 96, 77, 52, 19}; System.out.println("原数组: ".原创 2020-05-11 12:51:12 · 113 阅读 · 0 评论 -
排序算法系列05-希尔排序
希尔排序简介实现(java)复杂度和稳定性1.希尔排序简介插入排序, 增量分组, 缩小增量直至为1, 每个分组内使用直接插入排序2.实现(java)public class ShellSort { public static void main(String[] args) { int[] arr = {40, 35, 5, 63, 21, 82, 96, 77, 52, 19}; System.out.println("原数组: " + Array.原创 2020-05-11 12:39:09 · 81 阅读 · 0 评论 -
排序算法系列04-快速排序
快速排序简介实现(java)复杂度和稳定性1.快速排序简介交换排序, 使用分治的思想, 选择一个基准数, 左边的元素比基准数小, 右边的元素比基准数大, 递归对左右2部分使用同样的方式排序. 假设选择第一个数为基准数, 右索引从右向左查找比基准数小的元素, 左索引查找比基准数大的元素, 如果左索引小于右索引, 交换左索引和右索引上的元素, 直到左索引大于等于右索引2.实现(java)public class QuerySort { public static void main(S.原创 2020-05-11 12:29:55 · 103 阅读 · 0 评论 -
排序算法系列03-直接选择排序
直接选择排序简介实现(java)复杂度和稳定性1.直接选择排序简介选择排序, 选择一个假设为最小的元素, 与后面的元素依次比较, 有更小则交换, 每一轮将最小的元素排到最前面2.实现(java)public class SelectSort { public static void main(String[] args) { int[] arr = {40, 35, 5, 63, 21, 82, 96, 77, 52, 19}; System.out.原创 2020-05-11 11:58:00 · 211 阅读 · 0 评论 -
排序算法系列02-直接插入排序
直接插入排序简介实现(java)复杂度和稳定性1.直接插入排序简介插入排序, 从第二个元素开始, 取出来, 与之前的元素, 从右向左依次比较, 在合适的位置插入, 使之有序. 如果比较的元素大于取出元素, 比较元素后移, 否则表明排序完成2.实现(java)public class InsertSort { public static void main(String[] args) { int[] arr = {40, 35, 5, 63, 21, 82, 96,.原创 2020-05-11 11:45:03 · 210 阅读 · 0 评论 -
排序算法系列01-冒泡排序
冒泡排序简介实现(java)时间复杂度和空间复杂度1.冒泡排序简介交换排序, 从未端开始, 和之前的元素两两比较, 反序则交换, 每一轮将最小的元素排到最前面, 没有交换表明排序结束2.实现(java)public class BubbleSort { public static void main(String[] args) { int[] arr = {40, 35, 5, 63, 21, 82, 96, 77, 52, 19}; System.原创 2020-05-11 11:27:19 · 119 阅读 · 0 评论