数据结构之Java实现两个随机数组合并进行排序
原文地址:www.dushunchang.top
前言:
? 小Du猿结束"996ICP"CRUD开发工作生活,重新进入了校园学习生活。本周开始了第二周数据结构的基础知识学习,大爱向宇老师的上课方式,用生动形象的方式讲解抽象概念,但一开口就是LSP.O(∩_∩)O,向向宇大佬致敬,菜鸡小Du猿投来膜拜的眼光。
? 此博客用Java实现线性表的思想,实现数组的排序和序列化。序列化的排序方式采用冒泡排序的方式,但小Du猿正在优化该算法。原因为:采用冒泡排序的方式时间复杂度较大,正在考虑使用快速排序法;但此篇博客使用冒泡排序的方式,便于理解概念。
一、什么是线性表
二、ArrayList集合
? 上课时理解线性表的基本概念后,我不禁想到了"ArrayList"集合。而ArrayList的特征基本与线性表大致符合。所以我在此梳理一下ArrayList的概念:
-
ArrayList的底层是Object类的数组,默认长度是10,超过10后,长度变为原长度的1.5倍。 -
可以简单的认为是一个动态数组;实际上ArrayList就是用数组实现的,长度不够时,调用Arrays.copyOf方法,拷贝当前数组到一个新的长度更大的数组。
特点:
梳理ArrayList集合后,我们可以大概将线性表的特征约等于ArrayList集合,顿时小Du猿"悟了"?(? ???ω??? ?)?
三、用线性表的思想排序数组间排序
实现的原理小Du用图的方式整理出来: 代码如下:
package com.company;
import java.util.Arrays;
import java.util.Random;
public class Mian {
public static void main(String[] args) {
Random random = new Random();
int[] a = new int[10];
int[] b = new int[10];
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;
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));
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));
}
}
运行结果为:
四、冒泡排序:
冒泡排序: 在数组中两两进行比较,较大数往后移动,与下一位数再次两两比较,依次循环排序。 原理图如下: 代码如下:
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));
}
}
结果为: 前路漫漫,我秃了,也强了。觉得不错,一波三联,您的肯定就是小Du猿最大的动力。Thanks?(・ω・)ノ
?
|