服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java实现两个随机数组合并进行排序的方法

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

2021-12-27 14:01小Du猿 Java教程

本文主要介绍了Java实现两个随机数组合并进行排序的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

前言:

​ 小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用图的方式整理出来:

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

代码如下:

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));
  }
}

运行结果为:

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

 

四、冒泡排序:

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

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

代码如下:

/**
* @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实现两个随机数组合并进行排序的方法的文章就介绍到这了,更多相关Java 随机数排序内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_44985115/article/details/120209444

延伸 · 阅读

精彩推荐
  • Java教程解决SpringBoot整合RocketMQ遇到的坑

    解决SpringBoot整合RocketMQ遇到的坑

    这篇文章主要介绍了解决SpringBoot整合RocketMQ遇到的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    喝酸奶的小睿睿8432021-09-24
  • Java教程JAVA JDK8 List分组的实现和用法

    JAVA JDK8 List分组的实现和用法

    今天小编就为大家分享一篇关于JAVA JDK8 List分组的实现和用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编...

    Sam哥哥11182021-06-19
  • Java教程java IO流将一个文件拆分为多个子文件代码示例

    java IO流将一个文件拆分为多个子文件代码示例

    这篇文章主要介绍了java IO流将一个文件拆分为多个子文件代码示例,具有一定借鉴价值,需要的朋友可以参考下。...

    人圭先生4452021-03-10
  • Java教程Spring Boot 使用Druid详解

    Spring Boot 使用Druid详解

    本篇文章主要介绍了Spring Boot 使用Druid配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    心碎落地的声音5902020-10-08
  • Java教程jfreechart画折线图的方法

    jfreechart画折线图的方法

    这篇文章主要为大家详细介绍了jfreechart画折线图的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    yuhentian5542021-05-10
  • Java教程JFinal实现伪静态的方法

    JFinal实现伪静态的方法

    JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。这篇文章主要介绍了...

    谁将新樽辞旧月,今月曾5512021-04-23
  • Java教程Java反射(Class类,Class对象获取)

    Java反射(Class类,Class对象获取)

    下面是对Java反射机制是在程序的运行过程中,Java语言的反射机制的超详细解说,点进来的小伙伴不要错过奥...

    LL.LEBRON6522021-11-26
  • Java教程入门java的第一步HelloWorld

    入门java的第一步HelloWorld

    这篇文章主要介绍了入门java的第一步-Hello,World,文中通过示例代码介绍的非常详细,对大家的java初步学习具有一定的学习价值,需要的朋友可以参考下...

    xxh-我很喜欢你7372021-09-04