数据结构与算法
ThinkingInGIS
Make GIS Great Again!
展开
-
Java实现插值查找算法 Insert search
下面带来Java版本插值查找算法的实现,本篇一些概念沿用上一篇博客,入数组左索引为left,右索引为right。先说明一下,插值查找算法要求待查找的数组为有序的。插值查找原理:1.插值查找算法类似于二分查找,不同的是插值查找每次从只适应的mid处开始查找;2.在二分查找中,求mid的公式为:插值算法将求mid的公式改进为:对应的代码为:int mid = left + (right - left) * (findVal - arr[left]) / (arr[right] - arr[l原创 2020-08-25 09:06:26 · 653 阅读 · 0 评论 -
Java实现二分查找及其优化
在Java中常用的查找算法有四种:1.顺序查找(不要求数组有序,挨个遍历进行比对);2.二分查找(要求数组有序);3.插值查找;4.斐波那契查找本文使用递归思想带来二分查找及其优化二分查找思路分析1.首选确定该数组中间下标mid=(left+right)/2;2.然后让需要查找的数findVal与arr[mid]比较;2.1findVal>arr[mid]说明要查找的数在mid的右边,因此需要递归的向右查找;2.2findVal<a...原创 2020-08-24 22:30:44 · 649 阅读 · 0 评论 -
Java实现基数排序及其推导过程 Radix Sort
本文带来八大排序算法之基数排序。基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort),它是通过键值的各个位的值,将要排序的元素分配至某些"桶“中,从而达到排序的作用。基数排序是效率高的稳定性的排序算法。基数排序是桶排序的扩展。基数排序基本思想:将所有待比较的数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序,这样从最低位排序一直到最高位排序完成以后,数位就变成一个有序序列。见下图(以数原创 2020-08-24 09:26:33 · 252 阅读 · 0 评论 -
Java实现归并排序 Merge Sort
本文带来八大排序算法之归并排序算法。归并排序是利用归并思想实现的排序算法,该算法采用经典的分治DAC(divide -and -conquer)策略。分治法将问题分(divide)成一些小的问题,然后递归求解,而治(conquer)的阶段将分的阶段得到的各答案“修补”在一起,即分而治之。图解:代码实现:import java.util.Arrays;public class MergeSort { // Driver method public static..原创 2020-08-19 23:22:40 · 476 阅读 · 0 评论 -
Java实现快速排序 Quick Sort
本文带来八大排序算法之快速排序算法。快速排序(QuickSort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程通过递归进行,以此达到整个数据变成有序序列。因此快速排序有一个重要概念就是分区。如何分区,则需要找一个中轴值(pivot),不同的版本的快速排序算法对中轴值pivot的选择不同:1.总是选择第一个元素为中轴值pivot;2.总是选择最后一个原创 2020-08-10 23:20:26 · 270 阅读 · 0 评论 -
Java实现插入排序及其优化 Shell Sort
本文带来八大排序算法之希尔排序。希尔排序可以认为是插入排序的一种优化算法。在上一篇插入排序的举例数组中,当第二轮排序过后,数组变为[34, 101, 119, 1],此时如果将最后一个元素放到最前,则要经历如下过程:[34, 101, 119, 119][34, 101, 101, 119][34, 34, 101, 119][1, 34, 101, 119]结论:当需要插入的数是较小的数时,数组前方的元素后移次数明显增多,对效率有影响。希尔排序也是一种插入排序,它是简单插入排序原创 2020-08-03 23:07:18 · 336 阅读 · 0 评论 -
Java实现插入排序及其优化 insertion sort
本文带来八大排序算法之插入排序。插入排序(Insertion Sort)属于内部排序算法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。插入排序基本思想:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出一个元素,把它的排序码依次与有序元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。推导过程(以数组 arr={101,34,119,1}为例):...原创 2020-07-27 22:23:19 · 386 阅读 · 0 评论 -
Java实现选择排序及其优化
本文带来八大排序算法之选择排序选择排序(Select Sorting)属于内部排序算法。是从待排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。基本思想:第 1 次从 arr[0] ~ arr[n-1] 中选取最小值 min,与 arr[0] 进行交换;第 2 次从 arr[1] ~ arr[n-1] 中选取最小值 min,与 arr[1] 进行交换;........第 i 次从 arr[i-1] ~ arr[n-1] 中选取最小值 min,与 arr[i原创 2020-07-24 11:09:12 · 558 阅读 · 2 评论 -
Java实现冒泡排序及其优化
冒泡排序(Bubble Sort):从左至右(从下标较小的元素开始)依次比较相邻元素的值,若发现逆序则交换,使较大的元素逐渐从前移向后部。冒泡排序的规则(以数组 arr= {3, 9, -1, 10, 20}为例):1.一共进行数组的大小 - 1 (arr.length - 1) 次的大循环(趟数);2.每一趟(每一次大循环)排序的次数逐渐减少:第一趟下来后,最大的数已经确定下来(在数组的最后),因此第二趟较第一趟排序对比的次数少;3.优化方案:如果我们发现在某趟排序中,没有发生过一次交换.原创 2020-07-23 10:54:11 · 445 阅读 · 0 评论 -
Java实现八皇后问题的解法(一维数组版本)
最近接触了数据结构与算法,这本该是计算机专业的同学大一就掌握的课程,可我现在才算正式接触,感到惭愧万分。但闻道有先后,术业有专攻。本篇博客开始记录本人学习数据结构与算法这门课的点滴,希望自己能坚持下去,不要像记英语单词书一样,每次记到abandon就放弃了。八皇后问题描述:在8*8的国际象棋棋盘中摆放8和皇后,使其不能相互攻击,即:任意两个皇后都不能处于同一行、同一列、同一斜线上,问有多少种解法?思路分析:1.第一个皇后先放在第一行的第一列;2.第二个皇后放在第二行的第一列,然后判断是否OK原创 2020-07-20 20:46:42 · 930 阅读 · 1 评论