Java实现两个随机数组合并进行排序的方法

目录
  • 前言:
  • 一、什么是线性表
  • 二、ArrayList集合
  • 三、用线性表的思想排序数组间排序
  • 四、冒泡排序:

前言:

​ 小Du猿结束"996ICP"CRUD开发工作生活,重新进入了校园学习生活。本周开始了第二周数据结构的基础知识学习,大爱向宇老师的上课方式,用生动形象的方式讲解抽象概念,但一开口就是LSP.O(∩_∩)O,向向宇大佬致敬,菜鸡小Du猿投来膜拜的眼光。

​ 此博客用Java实现线性表的思想,实现数组的排序和序列化。序列化的排序方式采用冒泡排序的方式,但小Du猿正在优化该算法。原因为:采用冒泡排序的方式时间复杂度较大,正在考虑使用快速排序法;但此篇博客使用冒泡排序的方式,便于理解概念。

一、什么是线性表

Q1:什么是线性表:

A1:线性表是由N个类型相同的数据元素的有限序列(换句话描述:是具有像线一样的性质的表)

Q2: 线性表的顺序存储结构:

A2: 一段地址连续的存储单元依次存储线性表的数据元素,使得线性表中在逻辑结构上相邻的数据元素存储在连续的物理存储单元中。

Q3:线性表的优缺点:

A3:

优点:1.无须为表示表中元素之间的逻辑关系而增加额外的存储空间。

​ 2. 可以快速地存取表中任一位置的元素。

缺点:1.插入和删除操作需要移动大量元素。

​ 2.当线性表长度变化较大时,难以确定存储空间的容量。
​ 3.造成存储空间的“碎片”。

二、ArrayList集合

​ 上课时理解线性表的基本概念后,我不禁想到了"ArrayList"集合。而ArrayList的特征基本与线性表大致符合。所以我在此梳理一下

ArrayList的概念

  • ArrayList的底层是Object类的数组,默认长度是10,超过10后,长度变为原长度的1.5倍。
  • 可以简单的认为是一个动态数组;实际上ArrayList就是用数组实现的,长度不够时,调用Arrays.copyOf方法,拷贝当前数组到一个新的长度更大的数组。

特点:

  • 随机访问速度快,插入和移除性能较差(数组的特点);
  • 支持null元素的存在;
  • 有顺序结构;
  • 元素可以重复;
  • 但线程不安全。

梳理ArrayList集合后,我们可以大概将线性表的特征约等于ArrayList集合,顿时小Du猿"悟了"⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄

三、用线性表的思想排序数组间排序

实现的原理小Du用图的方式整理出来:

代码如下:

package com.company;

import java.util.Arrays;
import java.util.Random;

/**
 * @author Du Shun Chang
 * @version 1.0
 * @date 2021/9/7 22:48
 * @Todo: 1.随机产生两个数组,并进行两个数组的排序。2.排序好的数组,进行排序合并
 * @QQ:1300442386
 */
public class Mian {
    public static void main(String[] args) {

//初始化两个长度为10的数组
        Random random = new Random();
        int[] a = new int[10];
        int[] b = new int[10];
//随机生成1000以内的数,并赋值到数组中
        for (int i = 0; i < 10; i++) {
            a[i] = random.nextInt(1000);
            b[i] = random.nextInt(1000);
        }
        System.out.println("随机产生数组A:" + Arrays.toString(a));
        System.out.println("随机产生数组B:" + Arrays.toString(b));
        int temp = 0;
//重新排序随机数组A
        for (int i = 0; i < 10; i++) {
            for (int j = i; j < 10; j++) {
                if (a[i] >= a[j]) {
                    // 定义中间变量值
                    temp = a[i];
                    // 换位赋值
                    a[i] = a[j];
                    // 获得新位置
                    a[j] = temp;
                }
            }
        }
        System.out.println("排序后的数组A:" + Arrays.toString(a));
//重新排序随机数组B
        for (int i = 0; i < 10; i++) {
            for (int j = i; j < 10; j++) {
                if (b[i] >= b[j]) {
                    // 定义中间变量值
                    temp = b[i];
                    // 换位赋值
                    b[i] = b[j];
                    // 获得新位置
                    b[j] = temp;
                }
            }
        }
        System.out.println("排序后的数组B:" + Arrays.toString(b));
//对新的数组进行合并及进行排序
        int l = a.length + b.length;
        int[] temps = new int[l];
        int i = 0, j = 0, h = 0;
        while (i < a.length || j < b.length) {
            if (i == a.length && j < b.length) {
                temps[h++] = b[j++];
            } else if (i < a.length && j == b.length) {
                temps[h++] = a[i++];
            } else if (a[i] <= b[j]) {
                temps[h++] = a[i++];
            } else if (a[i] > b[j]) {
                temps[h++] = b[j++];
            }
        }
        System.out.print("排序后最新数组:" + Arrays.toString(temps));
    }
}

运行结果为:

四、冒泡排序:

冒泡排序:
在数组中两两进行比较,较大数往后移动,与下一位数再次两两比较,依次循环排序。
原理图如下:

代码如下:

/**
 * @author Du Shun Chang
 * @version 1.0
 * @date 2021/9/8 22:48
 * @Todo: 冒泡排序演示
 * @QQ:1300442386
 */
 public class Mian{
    public static void main(String[] args) {
   int[] arr = {6, 3, 8, 2, 9, 1};
        System.out.println("排序前数组为:" + Arrays.toString(arr));
        for (int s = 0; s < arr.length - 1; s++) {//外层循环控制排序趟数
            for (int k = 0; k < arr.length - 1 - s; k++) {//内层循环控制每一趟排序多少次
                if (arr[k] > arr[k + 1]) {
                    int temp1 = arr[k];
                    arr[k] = arr[k + 1];
                    arr[k + 1] = temp1;
                }
            }
        }
        System.out.println("排序后数组为:" + Arrays.toString(arr));
         }
        }

结果为:

到此这篇关于Java实现两个随机数组合并进行排序的方法的文章就介绍到这了,更多相关Java 随机数排序内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java重点之基于比较的七大排序

    七大基于比较的排序 直接插入排序 思想:以双指针来进行遍历数组和寻找较小元素的操作,每次找到较小元素的时候就将其插入到前面的适当位置,当遍历完整个数组,并完成插入操作后,排序完成. 时间复杂度:最好情况:O(N) 最坏情况:O(N^2) 空间复杂度:O(1) 结论:当一组数据趋近于有序,适用于插入排序 public static void insertSort(int[] array) { //该循环实现对整个数组的遍历操作 for (int i = 1; i < array.length; +

  • Java数据结构之基于比较的排序算法基本原理及具体实现

    目录 1. 七大基于比较的排序-总览 1.1常见基于比较的排序分类 1.2时间复杂度,空间复杂度以及稳定性. 2.直接插入排序 2.1 直接插入排序的基本思想 2.2 直接插入排序动画演示 2.3 代码示例 2.4 时间复杂度,空间复杂度以及稳定性 3. 希尔排序 3.1 算法思想 3.2 图片演示 3.3 代码示例 3.4 时间复杂度,空间复杂度以及稳定性 4.选择排序 4.1 算法思想 4.2 动画演示 4.3 代码示例 4.4 时间复杂度,空间复杂度以及稳定性 5.堆排序 5.1 算法思想

  • JAVA十大排序算法之桶排序详解

    目录 桶排序 代码实现 时间复杂度 算法稳定性 总结 桶排序 桶排序是计数排序的升级,计数排序可以看成每个桶只存储相同元素,而桶排序每个桶存储一定范围的元素,通过函数的某种映射关系,将待排序数组中的元素映射到各个对应的桶中,对每个桶中的元素进行排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序),最后将非空桶中的元素逐个放入原序列中. 桶排序需要尽量保证元素分散均匀,否则当所有数据集中在同一个桶中时,桶排序失效. 代码实现 1.找出数组中的最大值max和最小值min,可以确定出数组所在范

  • JAVA十大排序算法之基数排序详解

    目录 基数排序 代码实现 时间复杂度 算法稳定性 基数排序 vs 桶排序 vs 计数排序 总结 基数排序 常见的数据元素一般是由若干位组成的,比如字符串由若干字符组成,整数由若干位0~9数字组成. 基数排序按照从右往左的顺序,依次将每一位都当做一次关键字,然后按照该关键字对数组排序,同时每一轮排序都基于上轮排序后的结果:当我们将所有的位排序后,整个数组就达到有序状态.基数排序不是基于比较的算法. 基数是什么意思?对于十进制整数,每一位都只可能是0~9中的某一个,总共10种可能.那10就是它的基,

  • Java排序的那些事之sort方法的使用详解

    目录 引言 升序 数组 集合 降序 声明一个类实现接口 匿名内部类实现接口 Lambda表达式实现接口 自定义数据类型的排序 总结: 引言 在学习Java过程中,排序sort是我们常用的功能:在Java里,数组有Arrays.sort()可以排序,集合则是Collections.sort()方法排序:默认情况下是升序排列,但是降序又该怎么排?又可以通过哪几种方法呢?自定义类型又该怎么做? 下面就来介绍一下sort方法的使用: 升序 升序是默认情况下的,所以这里就简单展示一下使用的方法: 数组 数

  • Java实现两个随机数组合并进行排序的方法

    目录 前言: 一.什么是线性表 二.ArrayList集合 三.用线性表的思想排序数组间排序 四.冒泡排序: 前言: ​ 小Du猿结束"996ICP"CRUD开发工作生活,重新进入了校园学习生活.本周开始了第二周数据结构的基础知识学习,大爱向宇老师的上课方式,用生动形象的方式讲解抽象概念,但一开口就是LSP.O(∩_∩)O,向向宇大佬致敬,菜鸡小Du猿投来膜拜的眼光. ​ 此博客用Java实现线性表的思想,实现数组的排序和序列化.序列化的排序方式采用冒泡排序的方式,但小Du猿正在优化该

  • Java比较两个List的值是否相等的方法

    本文实例讲述了Java比较两个List的值是否相等的方法.分享给大家供大家参考.具体如下: 假设两个队列 {1,2,3,4} 和 {4,3,2,1} ,这个方法用来比较这两个队列中包含的值是否相等 /** * 队列比较 * @param <T> * @param a * @param b * @return */ public static <T extends Comparable<T>> boolean compare(List<T> a, List&l

  • Java获取两个字符串中最大相同子串的方法

    "abcwerthelloyuiodef" "cvhellobnm" 思路: 1,将短的那个子串按照长度递减的方式获取到. 2,将每获取到的子串去长串中判断是否包含,如果包含,已经找到! class StringTest3 { public static String getMaxSubString(String s1,String s2) { String max = "",min = ""; max = (s1.lengt

  • java获取键盘输入的数字,并进行排序的方法

    需求:由键盘输入三个整数分别存入变量num1.num2.num3,对它们进行排序, 并且从小到大输出 要求使用2种方法实现: 一.使用if-else分支结构: 二.使用java内置模块Arrays的排序方法. 一.使用if-else分支结构 class Date19_02 { public static void main(String[] arg){ sortOne(); } public static void sortOne(){ Scanner sc1 = new Scanner(Sys

  • JAVA求两直线交点和三角形内外心的方法

    一.求两直线交点 复制代码 代码如下: class Point {    double x;    double y; public Point() {        this.x = 0;        this.y = 0;    }}class Line {    Point a;    Point b; public Line() {        this.a = new Point();        this.b = new Point();    }    //求两直线的交点,斜

  • java取两个字符串的最大交集

    本文实例讲述了java取两个字符串的最大交集的实现方法,分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package com.itheima.net; public class Game13 {     public static void main(String[] args)     {         String s1 = "135adbfg67";         String s2 = "125dbf59";         Strin

  • java实现两个文件的拼接

    用Java语言实现两个文件的拼接与上一篇用Java实现两个文件的异或使用的方法都一样,都是FileInputStream()与FileOutputStream()方法,两个相同大小的文件a,b,把文件b拼接在文件a之后,输出的文件名为outfile具体代码详见下述内容: import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutp

  • 深入理解JAVA中的聚集和组合的区别与联系

    选自<JAVA语言程序设计-基础篇(原书第8版)> 定义:一个对象可以包含另一个对象.这两个对象之间的关系称为组合(composition). 组合实际上是聚集关系的一种特殊形式.聚集模拟了具有(has-a)关系,表示两个对象之间的归属关系.归属关系中的所有者对象称为聚集对象(aggregation object),而它的类称为聚集类(aggregating class).归属关系中的从属对象称为被聚集类(aggregated object),而它的类被称为被聚集类(aggregated cl

  • java的三种随机数生成方式

    目录 第一种 第二种 第三种 随机数的产生在一些代码中很常用,也是我们必须要掌握的.而java中产生随机数的方法主要有三种: 第一种:new Random() 第二种:Math.random() 第三种:currentTimeMillis() 第一种 第一种需要借助java.util.Random类来产生一个随机数发生器,也是最常用的一种,构造函数有两个,Random()和Random(long seed).第一个就是以当前时间为默认种子,第二个是以指定的种子值进行.产生之后,借助不同的语句产生

  • Java结构型设计模式之组合模式详解

    目录 组合模式 应用场景 优缺点 主要角色 组合模式结构 分类 透明组合模式 创建抽象根节点 创建树枝节点 创建叶子节点 客户端调用 安全组合模式 创建抽象根节点 创建树枝节点 创建叶子节点 客户端调用 组合模式 组合模式(Composite Pattern)也称为整体-部分(Part-Whole)模式,属于结构型模式. 它的宗旨是通过将单个对象(叶子节点)和组合对象(树枝节点)用相同的接口进行表示,使得客户端对单个对象和组合对象的使用具有一致性. 组合模式一般用来描述整体与部分的关系,它将对象

随机推荐