
你在这里没有进行排序
public static void main(String[] args) throws InterruptedException {
//生成随机数组
int[] arr = new int[100];
for (int i = 0; i < 100; i++) {
arr[i] = (int) (Mathrandom() 100) + 1;
}
for (int i = 0; i < arrlength; i++)
Systemoutprint(arr[i] + "\t");
//生成随机数组
//小到大排序
int num=0;//记录移动次数 根据你的意思这是会根据生成数组的不同而大小不一样的
for(int i=0;i<arrlength;i++){
for(int j=0;j<arrlength-i-1;j++){
if(arr[j]>arr[j+1]){
arr[j]=arr[j]+arr[j+1];
arr[j+1]=arr[j]-arr[j+1];
arr[j]=arr[j]-arr[j+1];
num++;
}
}
}
Systemoutprintln("\n一共移动"+num+"次,完成排序");
for (int i = 0; i < arrlength; i++)
Systemoutprint(arr[i] + "\t");
}
Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的id必须不同。各种主键ID生成策略对比,见 常见分布式主键ID生成策略
把 41位的时间前缀 , 10位的节点标识 , 12位的sequence 组合在一起。
除了最高位bit标记为不可用以外,其余三组bit占位均可浮动,看具体的业务需求而定。 默认情况下41bit的时间戳,1970年算起可以支持该算法使用到2038年,10bit的工作机器id可以支持1024台机器,序列号支持1毫秒产生4096个自增序列id 。
Snowflake是Twitter在2010年用Scala语言写的一套主键生成策略,用Thrift对外发布主键生成服务,其中依赖了Twitter内部的Infrastructure,后来Twitter用 Twitter-server 代替了Snowflake,自2012年起就未更新。见 Twitter-Snowflake项目地址(Tags:snowflake-2010)
之前写了一个Java的实现,改自网上一个版本: Twitter的分布式自增ID算法Snowflake实现分析及其Java、Php和Python版 。后来看到当当网的 Sharding-JDBC 分库分表中间件已实现了此算法。就直接在其中添加了一些新特性,已merge。( 具体实现 , 说明文档 )
添加3种IdGenerator实现。
用笔记本(i7-3632QM 22GHz 四核八线程)测试了下,每秒生成409万(理论上的峰值),CPU占用率185%。
以上就是关于JAVA基础算法全部的内容,包括:JAVA基础算法、数据库分库分表(二)Twitter-Snowflake(64位分布式ID算法)分析与JAVA实现、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)