Java實現(xiàn)兩個隨機數(shù)組合并進行排序的方法
前言:
小Du猿結(jié)束"996ICP"CRUD開發(fā)工作生活,重新進入了校園學習生活。本周開始了第二周數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)知識學習,大愛向宇老師的上課方式,用生動形象的方式講解抽象概念,但一開口就是LSP.O(∩_∩)O,向向宇大佬致敬,菜雞小Du猿投來膜拜的眼光。
此博客用Java實現(xiàn)線性表的思想,實現(xiàn)數(shù)組的排序和序列化。序列化的排序方式采用冒泡排序的方式,但小Du猿正在優(yōu)化該算法。原因為:采用冒泡排序的方式時間復雜度較大,正在考慮使用快速排序法;但此篇博客使用冒泡排序的方式,便于理解概念。
一、什么是線性表
Q1:什么是線性表:
A1:線性表是由N個類型相同的數(shù)據(jù)元素的有限序列(換句話描述:是具有像線一樣的性質(zhì)的表)
Q2: 線性表的順序存儲結(jié)構(gòu):
A2: 一段地址連續(xù)的存儲單元依次存儲線性表的數(shù)據(jù)元素,使得線性表中在邏輯結(jié)構(gòu)上相鄰的數(shù)據(jù)元素存儲在連續(xù)的物理存儲單元中。
Q3:線性表的優(yōu)缺點:
A3:
優(yōu)點:1.無須為表示表中元素之間的邏輯關(guān)系而增加額外的存儲空間。
2. 可以快速地存取表中任一位置的元素。
缺點:1.插入和刪除操作需要移動大量元素。
2.當線性表長度變化較大時,難以確定存儲空間的容量。
3.造成存儲空間的“碎片”。
二、ArrayList集合
上課時理解線性表的基本概念后,我不禁想到了"ArrayList"集合。而ArrayList的特征基本與線性表大致符合。所以我在此梳理一下
ArrayList的概念:
- ArrayList的底層是Object類的數(shù)組,默認長度是10,超過10后,長度變?yōu)樵L度的1.5倍。
- 可以簡單的認為是一個動態(tài)數(shù)組;實際上ArrayList就是用數(shù)組實現(xiàn)的,長度不夠時,調(diào)用Arrays.copyOf方法,拷貝當前數(shù)組到一個新的長度更大的數(shù)組。
特點:
- 隨機訪問速度快,插入和移除性能較差(數(shù)組的特點);
- 支持null元素的存在;
- 有順序結(jié)構(gòu);
- 元素可以重復;
- 但線程不安全。
梳理ArrayList集合后,我們可以大概將線性表的特征約等于ArrayList集合,頓時小Du猿"悟了"⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄
三、用線性表的思想排序數(shù)組間排序
實現(xiàn)的原理小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.隨機產(chǎn)生兩個數(shù)組,并進行兩個數(shù)組的排序。2.排序好的數(shù)組,進行排序合并
* @QQ:1300442386
*/
public class Mian {
public static void main(String[] args) {
//初始化兩個長度為10的數(shù)組
Random random = new Random();
int[] a = new int[10];
int[] b = new int[10];
//隨機生成1000以內(nèi)的數(shù),并賦值到數(shù)組中
for (int i = 0; i < 10; i++) {
a[i] = random.nextInt(1000);
b[i] = random.nextInt(1000);
}
System.out.println("隨機產(chǎn)生數(shù)組A:" + Arrays.toString(a));
System.out.println("隨機產(chǎn)生數(shù)組B:" + Arrays.toString(b));
int temp = 0;
//重新排序隨機數(shù)組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("排序后的數(shù)組A:" + Arrays.toString(a));
//重新排序隨機數(shù)組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("排序后的數(shù)組B:" + Arrays.toString(b));
//對新的數(shù)組進行合并及進行排序
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("排序后最新數(shù)組:" + Arrays.toString(temps));
}
}
運行結(jié)果為:

四、冒泡排序:
冒泡排序:
在數(shù)組中兩兩進行比較,較大數(shù)往后移動,與下一位數(shù)再次兩兩比較,依次循環(huán)排序。
原理圖如下:

代碼如下:
/**
* @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("排序前數(shù)組為:" + Arrays.toString(arr));
for (int s = 0; s < arr.length - 1; s++) {//外層循環(huán)控制排序趟數(shù)
for (int k = 0; k < arr.length - 1 - s; k++) {//內(nèi)層循環(huán)控制每一趟排序多少次
if (arr[k] > arr[k + 1]) {
int temp1 = arr[k];
arr[k] = arr[k + 1];
arr[k + 1] = temp1;
}
}
}
System.out.println("排序后數(shù)組為:" + Arrays.toString(arr));
}
}
結(jié)果為:

到此這篇關(guān)于Java實現(xiàn)兩個隨機數(shù)組合并進行排序的方法的文章就介紹到這了,更多相關(guān)Java 隨機數(shù)排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java?線程池狀態(tài)及狀態(tài)轉(zhuǎn)換
這篇文章主要介紹了java?線程池狀態(tài)及狀態(tài)轉(zhuǎn)換,Java里線程池的狀態(tài)和線程的狀態(tài)是完全不同的,具體有幾種狀態(tài)和哪些不同點,下面文章詳細介紹,需要的小伙伴可以參考一下2022-05-05
Java springboot接口迅速上手,帶你半小時極速入門
這篇文章主要給大家介紹了關(guān)于SpringBoot實現(xiàn)API接口的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-09-09
基于Springboot2.3訪問本地路徑下靜態(tài)資源的方法(解決報錯:Not allowed to load local
這篇文章主要介紹了基于Springboot2.3訪問本地路徑下靜態(tài)資源的方法(解決報錯:Not allowed to load local resource),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08
教你如何用Eclipse創(chuàng)建一個Maven項目
這篇文章主要介紹了教你如何用Eclipse創(chuàng)建一個Maven項目,文中有非常詳細的代碼示例,對正在入門Java的小伙伴們是非常有幫助的喲,需要的朋友可以參考下2021-05-05
@ConfigurationProperties在IDEA中出現(xiàn)紅色波浪線問題解決方法
本文介紹了在Springboot項目中,當@ConfigurationProperties注解出現(xiàn)紅色波浪線時的解決方法,文中有詳細的解決方案供大家參考,需要的朋友可以參考下2024-09-09

