
算法
白色的榆
这个作者很懒,什么都没留下…
展开
-
冒泡排序—Java实现
原理:比较俩哥哥相邻的元素,将值大的元素交换到右端思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。举例说明:要排序数组:int[] arr={6,3,8,2,9,1}; 第一趟排...原创 2018-08-19 15:05:13 · 206 阅读 · 0 评论 -
全排列问题
今天在刷剑指offer编程题时遇到全排列的问题,现在在这记录下。题目如下:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。...原创 2018-09-12 20:27:45 · 20487 阅读 · 2 评论 -
斐波那契查找—Java实现
基本思想:也是二分查找的一种提升算法,通过运用黄金比例的概念在数列中选择查找点进行查找,提高查找效率。同样地,斐波那契查找也属于一种有序查找算法。相对于折半查找,一般将待比较的key值与第mid=(low+high)/2位置的元素比较,比较结果分三种情况: 1)相等,mid位置的元素即为所求 2)>,low=mid+1; 3)<,high=mid-1。 斐波...原创 2018-08-20 17:13:10 · 2889 阅读 · 4 评论 -
差值查找—Java实现
在介绍插值查找之前,首先考虑一个新问题,为什么上述算法一定要是折半,而不是折四分之一或者折更多呢? 打个比方,在英文字典里面查“apple”,你下意识翻开字典是翻前面的书页还是后面的书页呢?如果再让你查“zoo”,你又怎么查?很显然,这里你绝对不会是从中间开始查起,而是有一定目的的往前或往后翻。 同样的,比如要在取值范围1 ~ 10000 之间 100 个元素从小到大均匀分布的数组中查...原创 2018-08-20 16:19:10 · 785 阅读 · 0 评论 -
二分查找—Java实现
说明:元素必须时有序的,如果是无序的要先进行无序操作基本思想:也称为折半查找,属于有序查找算法。每次取数组的中间值作为比较对象,如果小于a[mid] 则在数组的右边继续比较,如果大于a[mid] 则在数组的左边继续比较,如果等于a[mid] 则返回mid时间复杂度:最坏情况下,关键词比较次数为,且期望时间复杂度为O()注意:折半查找的前提条件是需要有序表顺序存储,对于静态查找表...原创 2018-08-20 16:04:06 · 221 阅读 · 0 评论 -
顺序查找—Java实现
说明:顺序查找适用于存储结构为顺序存储或链式存储的线性表基本思想:顺序查找也称为线性查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值key相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于key的结点,表示查找失败时间复杂度:查找成功时的平均查找长度为(n+1)/2若查找不成功,需要n+1次比较,时间复杂度为O(n)所以顺序...原创 2018-08-20 15:48:04 · 724 阅读 · 0 评论 -
快速排序—Java实现
基本思想:先从数列中取出一个数作为基准数分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边再对左右区间重复第二步,直到各区间只有一个数快速排序=挖坑填数+分治法实例: 数组a[]如下,取第一个数作为基准点 初始时,i=0; j=9; key=a[i]=72 因为已经将a[0]保存到key种,可以理解为在a[0]上挖了一个坑,可以将其他数据填进...转载 2018-08-19 18:40:24 · 164 阅读 · 0 评论 -
插入排序—Java实现
原理:通过构建有序序列,对未排序数据,在一只顺序序列从后向前扫描,找到相应位置并插入。步骤:插入排序是从下标i为1的数开始进行遍历,每一轮之后i++从下标j为i开始与它左边的数比较如果小于左边的数则交换位置,然后j–,重复步骤2举例:数组arr=[53,27,36,15,69,42]第一趟: 从下标为1开始,也就是第二个数 27,因为每次都是与左边的数字进行比较,...原创 2018-08-19 15:58:46 · 158 阅读 · 0 评论 -
选择排序—Java实现
原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。 简单选择排序的基本思想:给定数组:int[] arr={里面n个数据};第1趟排序,在待排序数据arr[0]~arr[n-1]中选出最小的...原创 2018-08-19 15:26:27 · 143 阅读 · 0 评论 -
归并排序-java实现
基本思想: 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案”修补”在一起,即分而治之)。如图: 可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。...原创 2018-09-13 16:10:53 · 196 阅读 · 1 评论