iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >Java如何排一亿个随机数
  • 865
分享到

Java如何排一亿个随机数

2023-06-25 17:06:13 865人浏览 独家记忆
摘要

这篇文章主要介绍Java如何排一亿个随机数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、直接插入排序1. 图解插排思路 : 字面意义,插入是将某一元素按某种规则放入到特定集合中 ,因此我们需要将序列划分成为两块

这篇文章主要介绍Java如何排一亿个随机数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、直接插入排序

1. 图解插排

思路 : 字面意义,插入是将某一元素按某种规则放入到特定集合中 ,因此我们需要将序列划分成为两块 ,一部分为有序集合, 另一部分为待排序集合

图解 :

Java如何排一亿个随机数

为了方便理解,我们就按最最最特殊的4321序列来举例,

根据上述的思路 ,我们需要将序列划分为两部分, 为了编码方便,我们将第一个元素假设为有序集合, 那么我们的循环应当是从第2个元素开始的,也就是3

为避免后面操作把3覆盖掉了 , 我们选择一个临时变量来保存3.也就是上文的 val=arr[1] ,

由于是对数组继进行操作 , 我们同时也需要获取有序集合的最后一个元素的索引作为游标

当游标不越界 , 且待插入的值小于游标指示位置时(上图的4<3) , 我们将元素4后移 , 游标前移,继续检查集合中的其它元素是否也小于待插入的元素, 直到游标越界

上图由于集合内只有一个4, 游标前移越界了, 因此循环终止. 下一轮比较开始执行

2. 代码实现

public static void insertSort(int[]arr){        for(int i = 1 ; i < arr.length; i++){            int val = arr[i];            int valIndex = i - 1; //游标            while(valIndex >= 0 && val < arr[valIndex]){ //插入的值比游标指示的值小                arr[valIndex + 1] = arr[valIndex];                valIndex--; //游标前移            }            arr[valIndex+1] = val;        }    }1234567891011

3.性能检测与时空复杂度

实际运行80w个数据耗时1分4秒(非准确值,每台机器可能都不一样)

Java如何排一亿个随机数

直接插排在排序记录较少, 关键字基本有序的情况下效率较高

时间复杂度 :

关键字比较次数 : KCN=(n^2)/2 总移动次数 : RMN= (n^2)/2

因此时间复杂度约为 O(N^2)

二、希尔排序(交换法)

1. 思路图解

Java如何排一亿个随机数

2. 代码实现

public static void shellSort(int[] arr){ //交换法        int tmp = 0;        for(int gap = arr.length / 2 ; gap > 0 ; gap /= 2){            for(int i = gap ; i < arr.length ; i++){ //先遍历所有数组                for(int j  = i - gap ; j >= 0 ; j -= gap){//开启插入排序                    if(arr[ j ] > arr[ gap + j ]){ //可以根据升降序修改大于或小于                        tmp = arr[gap + j];                        arr[j+gap] = arr[j];                        arr[j] = tmp;                    }                }            }            System.out.println(gap);            System.out.println(Arrays.toString(arr));        }    }12345678910111213141516

这里最难理解的应该是第三个for循环,j = i - gap, 表示小组内的第一个元素,即j=0,

当小组内的第一个元素大于第二个元素时(由于是逻辑上的分类,第二个元素的索引应当是第一个元素的所有值+增量gap) , 交换两者,反之j-=gap,继续比较或跳出循环 ,

如此往复将所有小组都遍历完之后 , 缩小增量(即gap/=2) , 然后继续上述步骤, 直到增量gap为1时, 序列排序结束

3. 时间复杂度

希尔排序的时间复杂度取决于增量序列的函数 , 需要具体问题具体分析,并不是一个确定的值,这也是第四点需要讨论的问题

4. 关于增量的选择

上述我们在做排序的时候增量缩减选用的时gap/=2的模型, 这并不是最优的选择 , 关于增量的选取 , 属于数学界尚未解决的一个问题

但是可以确定的是, 通过大量的实验证明 ,当n->无穷大时, 时间复杂度可以减少到 :

Java如何排一亿个随机数

在下一点, 移位法中 , 我们也做了几个实验 , 可以肯定的时,对于一定规模内(如800w~1亿) 的计算, 希尔排序的速度远远超过了堆排序, 至少在笔者的电脑上是这样的

三、希尔排序(移位法)

交换法的速度比移位法慢很多 ,因此更多的是使用地移位法,并且移位法相较于交换法, 更"像"插入排序

1. 思路

思路其实就是上述两种排序的结合 , 将分组插入的优点结合到一起, 效率非常高

体现的就是分治的思路,将一个较大序列切割成若干较小序列

Java如何排一亿个随机数

2. 代码实现

public static void shellSort02(int[] arr){ //移位法        for(int gap = arr.length/2 ; gap > 0 ; gap /= 2){ //分组            for(int i = gap ; i < arr.length ; i++){ //遍历                int valIndex = i;                int val = arr[valIndex];                if(val < arr[valIndex-gap]){ //插入的值小于组内另一个值                   while(valIndex - gap >=0 && val < arr[valIndex-gap]){ //开始插排                       // 插入                       arr[valIndex] = arr[valIndex-gap];                       valIndex -= gap; //让valIndex = valIndex-gap (游标前移)                   }                }                arr[valIndex] = val;            }        }    }12345678910111213141516

3. 实验结果

Java如何排一亿个随机数
Java如何排一亿个随机数
Java如何排一亿个随机数

以上是“Java如何排一亿个随机数”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Java如何排一亿个随机数

本文链接: https://www.lsjlt.com/news/306075.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java如何排一亿个随机数
    这篇文章主要介绍Java如何排一亿个随机数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、直接插入排序1. 图解插排思路 : 字面意义,插入是将某一元素按某种规则放入到特定集合中 ,因此我们需要将序列划分成为两块 ...
    99+
    2023-06-25
  • Java算法实战之排一亿个随机数
    目录前言一、直接插入排序1. 图解插排2. 代码实现3.性能检测与时空复杂度二、希尔排序(交换法)1. 思路图解2. 代码实现3. 时间复杂度4. 关于增量的选择三、希尔排序(移位法...
    99+
    2024-04-02
  • php数组随机排序如何排
    要在PHP中对数组进行随机排序,可以使用shuffle()函数。这个函数会打乱数组中元素的顺序,从而实现随机排序。以下是一个示例代码...
    99+
    2024-03-02
    php
  • shell如何产生一个随机数
    这篇文章主要介绍了shell如何产生一个随机数,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。产生一个随机数echo $RANDOM...
    99+
    2024-04-02
  • java一次怎么生成多个随机数
    这篇文章主要介绍了java一次怎么生成多个随机数的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java一次怎么生成多个随机数文章都会有所收获,下面我们一起来看看吧。本教程操作环境:windows7系统、java...
    99+
    2023-06-30
  • java随机数如何生成
    在Java中,可以使用java.util.Random类来生成随机数。以下是一些示例代码: 生成一个范围在0到n之间的随机整数: ...
    99+
    2024-02-29
    java
  • 如何在java项目中实现一个随机数生产算法
    如何在java项目中实现一个随机数生产算法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java提供了Math.random()函数,返回一个double类型的随机数,也有ut...
    99+
    2023-05-31
    ava java
  • java如何生成一定范围的随机数
    在Java中,可以使用`java.util.Random`类来生成一定范围的随机数。下面是一种常用的方法:1. 创建一个`Rando...
    99+
    2023-08-24
    java
  • JavaScript如何从整数中随机选取一个数值
    这篇文章主要介绍了JavaScript如何从整数中随机选取一个数值,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。从整数中,随机选取一个数值有...
    99+
    2024-04-02
  • JavaScript如何从数组中获取一个随机项
    这篇文章给大家分享的是有关JavaScript如何从数组中获取一个随机项的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。从数组中获取一个随机项var items ...
    99+
    2024-04-02
  • js如何以随机顺序排序数组
    这篇文章将为大家详细讲解有关js如何以随机顺序排序数组,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。以随机顺序排序数组实例var points =&n...
    99+
    2024-04-02
  • JAVA中如何获取随机数
    JAVA中如何获取随机数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在Java中我们可以使用java.util.Random类来产生一个随机数发生器。它有两种形式的构造函数,...
    99+
    2023-06-03
  • JavaScript如何返回一个lower-upper直接的随机数
    这篇文章主要介绍了JavaScript如何返回一个lower-upper直接的随机数,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。random:返回一个lower-upper...
    99+
    2023-06-03
  • 使用java怎么一次生成多个随机数
    这期内容当中小编将会给大家带来有关使用java怎么一次生成多个随机数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、...
    99+
    2023-06-14
  • Java实现两个随机数组合并进行排序的方法
    目录前言:一、什么是线性表二、ArrayList集合三、用线性表的思想排序数组间排序四、冒泡排序:前言: ​ 小Du猿结束"996ICP"CRUD开发工作生活,重新进入了...
    99+
    2024-04-02
  • PHP如何随机打乱一个字符串
    这篇文章将为大家详细讲解有关PHP如何随机打乱一个字符串,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 使用字符串函数 str_shuffle():将字符串中的字符随机打乱。 $str = "Hel...
    99+
    2024-04-02
  • JavaScript如何随机排列数组中的元素
    这篇文章主要介绍了JavaScript如何随机排列数组中的元素,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。随机排列数组中的元素我每天都在这样做var my_lis...
    99+
    2023-06-27
  • PHP如何从数组中随机取出一个或多个单元
    这篇文章将为大家详细讲解有关PHP如何从数组中随机取出一个或多个单元,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何从数组中随机取出一个或多个单元 数组是 PHP 中用于存储数据的有序集合。它们由一个键...
    99+
    2024-04-02
  • js如何随机生成一个验证码
    这篇文章给大家分享的是有关js如何随机生成一个验证码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果:html代码:<p>验证码:</p>  ...
    99+
    2024-04-02
  • js如何使用当前时间创建一个随机数
    小编给大家分享一下js如何使用当前时间创建一个随机数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用当前时间创建一个随机数   &...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作