标签: 算法

Java程序员必知的8大排序算法

8种排序之间的关系

sort
直接插入排序

(1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排
好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数
也是排好顺序的。如此反复循环,直到全部排好顺序。
(2)实例

直接插入排序

(3)用java实现

[java]
public class insertSort {
public insertSort(){
int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
int temp=0;
for(int i=1;i<a.length;i++){ int j=i-1; temp=a[i]; for(;j>=0&&temp<a[j];j–){
a[j+1]=a[j]; //将大于temp的值整体后移一个单位
}
a[j+1]=temp;
}
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
}
[/java] 阅读详细 »

Hacker News排名算法分析

Hacker News使用Paul Graham开发的Arc语言编写,源码可以从https://github.com/nex3/arc/下载。下图是其排名算法实现:

arc

数学公式为:

score

P表示帖子的得票数,减去1是为了忽略发帖人的投票。在其他条件不变的情况下,得票越多,排名越高。
T表示距离发帖的时间(单位为小时),加上2是为了防止最新的帖子导致分母过小(之所以选择2,可能是因为从原始文章出现在其他网站,到转贴至Hacker News,平均需要两个小时)。在其他条件不变的情况下,越是新发表的帖子,排名越高。或者说,一个帖子的排名,会随着时间不断下降。
G表示”重力因子”(gravityth power),即将帖子排名往下拉的力量,默认值为1.8。它的数值大小决定了排名随时间下降的速度。

信用卡校验位算法THE LUHN MOD-10

1. 对卡号上的每位数字乘以权重。其规则是,如果卡号数字个数是偶数,则第一位乘以2,否则就乘以1,然后以后分别是,1,2,1,2,1,2;
2. 如果每位数字乘以权重后超过9 ,则需要减去 9;
3. 将所有的处理过的加权数字求和,用 数字 10 求模运算;
4. 余数应该是0,否则可能是输入错误。也可能是一个假号。

文章分类汇总

mysql慢查询优化

mysql慢查询原因分析与解决(一)——开启慢查询日志
mysql慢查询原因分析与解决(二)——explain分析查询

JVM基础及优化系列
 JVM内存模型简介
    JVM内存回收简介
    【译】JVM之jconsole的使用
    JVM参数详解
    JVM -verbose参数详解
    java jvm GC 参数设置
    java.lang.OutOfMemoryError: GC overhead limit exceeded解决
    《深入java虚拟机》笔记
jdk源码分析系列
        ArrayList源码分析
        LinkedList源码分析
        Vector源码分析
        HashMap源码分析
        HashTable源码分析
  阅读详细 »