摘要:算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 private static void sort(int[] list,int left,int right) { if(right-left<=0){ return; }else{ lon...
阅读全文
摘要:希尔排序希尔排序是插入排序的优化版。回忆一下插入排序,假如插入排序执行到一半的时候,这时数组左边是已经排好序的,而右边是还没有排序的。如果有一个很小的数据项恰好在右边的位置,这时所有左边已排好序的数组都得往右移,腾出空位让这个小的数据项插入。希尔排序是在插入算法的基础上再次降低交换的次数,以此获取性能的提升。public static void sort(int[] list) { int swap_count = 0; int length = list.length; int h = 1; while(h <= length / 3){ h = h * 3 + 1; }...
阅读全文
摘要:冒泡排序最简单,效率最差,实际工作中不推荐使用private static void sort(int[] list) { int swap_count = 0; for(int i = 0, len = list.length; i < len; i++){ for(int j = i + 1; j < len; j++){ if(list[i] > list[j]){ swap(list, i, j); swap_count++; } } } System.out.println("共交换:" + swap_count);
}
选择排序可看成...
阅读全文
摘要:先贴上一点代码,等脑子清醒点再好好理解// 求next数组 public static int[] getNext(String pattern) { int len = pattern.length(); char[] pattern_ary = pattern.toCharArray(); int i = 0; int[] next = new int[len]; next[0] = -1; int j = -1; while(i < len - 1){ if(j == -1 || pattern_ary[i] == pattern_ary[j]...
阅读全文
摘要:索引 是用来更快的找出需要的信息。我们一般理解的索引都是正向索引,如数据库表文档id字段1字段2字段4字段4文档1单词e单词b单词e单词g文档2单词c单词c单词d单词a文档3单词a单词a单词c单词f在这里 文档id是主键如果我们想查找 '单词a‘ ,我们需要从文档1开始逐个列逐个字段去遍历查找才能得出结果那么搜索引擎怎么做呢如果是把 列x 看成是 一篇文章 字段x 对应的是该文章的单词,用上面的这个表进行存储的话,我们需要多少列呢?当查找的时候又该如何查找呢?每篇文件都由不同的单词组成,单词各不相同,又或多或少。显然,如果使用上面这个表进行存储,效率低下不说,限于目前计算机的条件,也是
阅读全文