前言:
? 小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 隨機數排序內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/weixin_44985115/article/details/120209444