查找算法
gavenyeah
北京师范大学计算机专业研究生
展开
-
java查找算法(一)--顺序查找
对给定数组(字符串)顺序进行查找元素是否存在。public class SeqSearch { public static void main(String args[]){ int [] array={32,5,67,6,1,7}; int data=6; Sy原创 2016-03-21 14:08:42 · 3989 阅读 · 0 评论 -
java查找算法(三)--二分非递归查找
//非递归算法:public static int binarySearch_NonRec (int []a , int left, int right, int d){ //left,right均为小标 while (left <right ){ // 利用 while循环改变查找的范围,通过改变 left 和right 大小 int mid =(le原创 2016-03-21 14:14:19 · 635 阅读 · 0 评论 -
java查找算法(四)--随机查找(Randomized-Select)
/* * 以快排为模型,以第一个数为基准对数组进行划分,找到第一个数的正确位置 * 比较a[low]=pivot 值得位置与 k 的大小,确定继续在左右还是右边递归查找 * 平均时间复杂度为 O(n) * */public static int quickSearch (int []array , int left, int right, int k){ //left,right 位下标,原创 2016-03-21 14:17:39 · 2525 阅读 · 0 评论 -
java查找算法(五)--BFPRT查找算法
/* 思想与随机排序一样,随机排序中吧第一个数当做 pivot ,BFPST 排序中用中位数的中位数作为 pivot ,使划分效果更好 * 找到中位数的位置后,与 a[low] 交换,这样就转化为随机排序 * 比较a[low]=pivot 值得位置与 k 的大小,确定继续在左右还是右边递归查找 * 最坏情况下时间复杂度为 O(n)( 1)将输入数组的个元素划分为 n/5 组,每组5 个元素,原创 2016-03-21 14:18:51 · 1526 阅读 · 2 评论 -
求数组的最大K个数
Q:查找n个无序数(不重复)的最大K个数(考虑N很大时的时间复杂度)? 分析:如果对N个数进行先排序,再输出最大的K个数,则时间复杂度较大为O(nlgn)。所以可以查找数组的第N-K大的数记为pivot,对数组以pivot进行划分,则右边的数均比pivot大。 如果先找到n-k位置上的数,再划分,则复杂度可以降为O(n)。 由于原数组无序,故可以考虑随机选择查找(平均复杂度为O原创 2016-03-21 19:00:07 · 1683 阅读 · 0 评论 -
Rotated Array 旋转数组的解题报告--leetcode
Rotated Array即旋转数组的定义是:将一个有序数组的某个位置k之后的子数组移动到数组前面,是原数组的前半部分和后半部分都是有序的。例如:0,1,2,3,4,5,6,取k=4,则旋转之后的数组为:4,5,6,0,1,2,3.leetcode[https://leetcode.com/]上关于rotated array的题目一共有四题:33.Search in Rotated Sorted A原创 2016-08-28 10:56:37 · 1243 阅读 · 0 评论