1、冒泡排序 -- 升序
原理:
每次比较相邻两数
小的交换到前面
每轮结束后最大的数交换到最后
口诀:
冒泡排序速记口诀(升序)
n 个数字来排队
两两相比大靠后
外层循环 n-1
内层循环 n-1-i
示例:
int[] nums = {6, 3, 5, 2, 7, 4, 1, 9, 8};
System.out.println("排序前:" + Arrays.toString(nums));
for (int i = 0; i < nums.length - 1; i++) {
for (int j = 0; j < nums.length - 1 - i; j++) {
if(nums[j] < nums[j + 1]){
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
System.out.println("排序后:" + Arrays.toString(nums));
2、选择排序
public class Xuanze {
public static void main(String[] args) {
int[] nums = {66, 55, 77, 11, 33, 22, 88, 44, 99};
System.out.println("选择排序前,初始数组:" + Arrays.toString(nums));
for (int i = 0; i < nums.length; i++) {
int minIndex = i;
for (int j = i; j < nums.length; j++) {
if(nums[j] > nums[minIndex]){
minIndex = j;
}
}
int temp = nums[i];
nums[i] = nums[minIndex];
nums[minIndex] = temp;
}
System.out.println("选择排序后,排序数组:" + Arrays.toString(nums));
}
}
3、Arrays工具类的用法
boolean equals(array1,array2)
比较array1和array2两个数组是否相等
sort(array)
对数组array的元素进行升序排列
String toString(array)
将一个数组array转换成一个字符串
void fill(array,val)
把数组array所有元素都赋值为val
copyOf(array,length)
把数组array复制成一个长度为length的新数组,返回类型与复制的数组一致
int binarySearch(array, val)
查询元素值val在数组array中的下标(要求数组中元素已经按升序排列)
示例:
int[] scores1 = {78, 67, 89};
int[] scores2 = {78, 67, 89, 0};
System.out.println("数组是否相等:" + Arrays.equals(scores1, scores2));
int[] scores3 = new int[10];
System.out.println("默认数组内容:" + Arrays.toString(scores3));
Arrays.fill(scores3, 100);
System.out.println("填充后数组内容:" + Arrays.toString(scores3));
int[] scores4 = {11, 22, 33, 44, 55};
System.out.println("默认数组内容:" + Arrays.toString(scores4));
int[] scores5 = Arrays.copyOf(scores4, 10);
System.out.println("扩容后数组内容:" + Arrays.toString(scores5));
int[] scores6 = Arrays.copyOf(scores4, 3);
System.out.println("缩减后数组内容:" + Arrays.toString(scores6));
int[] scores7 = {9, 6, 7, 4, 8, 3, 5, 1, 2};
System.out.println("默认查找数组内容:" + Arrays.toString(scores7));
Arrays.sort(scores7);
System.out.println("默认查找数组升序内容:" + Arrays.toString(scores7));
System.out.println("是否包含数字3,下标值:" + Arrays.binarySearch(scores7, 3));
String[] names = {"jerry", "jack", "marry", "mark"};
System.out.println("姓名数组内容:" + Arrays.toString(names));
Arrays.sort(names);
System.out.println("姓名数组排序后内容:" + Arrays.toString(names));
4、二维数组
语法:
<数据类型> [ ][ ] 数组名 = new 数据类型[数组二维长度][数组一维长度];
或者
<数据类型> 数组名[ ][ ] = new 数据类型[数组二维长度][数组一维长度];
注意:
定义二维数组时,要定义最大维数,一维维度可以不定义,且长度不是必须一致的
二维数组实际上是一个以一维数组做为元素的一维数组
通过二维数组名获取长度,返回的是二维的长度,即有几个一维数组
示例:
int [ ][ ] scores = new int[5][]; -- 正确
int [ ][ ] scores = new int[][]; -- 错误
定义并赋值:
int[][] scores = new int[][]{ { 90, 85, 92, 78, 54 }, { 76, 63,80 }, { 87 }};
或者
int scores[][] = {{ 90, 85, 92, 78, 54 }, { 76, 63,80 }, { 87 } };
遍历二维数组:
for (int i = 0; i < scores.length; i++) {
for (int j = 0; j < scores[i].length; j++) {
System.out.print(scores[i][j] + " ");
}
System.out.println();
}
示例:
Scanner input = new Scanner(System.in);
System.out.print("请输入数列的行数:");
int line = input.nextInt();
int[][] nos = new int[line][line];
int num = 1;
for (int i = 0; i < nos.length; i++) {
for (int j = i; j < nos[i].length; j++) {
nos[j][i] = num++;
}
}
for (int i = 0; i < nos.length; i++) {
for (int j = 0; j < nos[i].length; j++) {
if(nos[i][j] == 0){
continue;
}
System.out.print(nos[i][j] + " ");
}
System.out.println();
}
input.close();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构