Java入门到架构师知识点整理 | 数组操作 | 数组排序
发布日期:2022-05-29 19:55:03
浏览次数:1
分类:技术文章
本文共 3268 字,大约阅读时间需要 10 分钟。
对数组进行排序是程序中非常基本的需求。常用的排序算法有冒泡排序、插入排序和快速排序等。
我们来看一下如何使用冒泡排序算法对一个整型数组从小到大进行排序:
// 冒泡排序import java.util.Arrays;public class Main { public static void main(String[] args) { int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 }; // 排序前: System.out.println(Arrays.toString(ns)); for (int i = 0; i < ns.length - 1; i++) { for (int j = 0; j < ns.length - i - 1; j++) { if (ns[j] > ns[j+1]) { // 交换ns[j]和ns[j+1]: int tmp = ns[j]; ns[j] = ns[j+1]; ns[j+1] = tmp; } } } // 排序后: System.out.println(Arrays.toString(ns)); }}
冒泡排序的特点是,每一轮循环后,最大的一个数被交换到末尾,因此,下一轮循环就可以“刨除”最后的数,每一轮循环都比上一轮循环的结束位置靠前一位。
另外,注意到交换两个变量的值必须借助一个临时变量。像这么写是错误的:
int x = 1;int y = 2;x = y; // x现在是2y = x; // y现在还是2
正确的写法是:
int x = 1;int y = 2;int t = x; // 把x的值保存在临时变量t中, t现在是1x = y; // x现在是2y = t; // y现在是t的值1
实际上,Java的标准库已经内置了排序功能,我们只需要调用JDK提供的Arrays.sort()
就可以排序:
// 排序import java.util.Arrays;public class Main { public static void main(String[] args) { int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 }; Arrays.sort(ns); System.out.println(Arrays.toString(ns)); }}朋友圈 输入:huany6880 添加冠亦老师 对于学习Java还有相关的一切疑惑与难题,皆可随时私信我咨询,(Java、人工智能方向)和Java架构师路线图、面试题资料等等
必须注意,对数组排序实际上修改了数组本身。例如,排序前的数组是:
int[] ns = { 9, 3, 6, 5 };
在内存中,这个整型数组表示如下:
┌───┬───┬───┬───┐ns───>│ 9 │ 3 │ 6 │ 5 │ └───┴───┴───┴───┘
当我们调用Arrays.sort(ns);
后,这个整型数组在内存中变为:
┌───┬───┬───┬───┐ns───>│ 3 │ 5 │ 6 │ 9 │ └───┴───┴───┴───┘
即变量ns
指向的数组内容已经被改变了。
如果对一个字符串数组进行排序,例如:
String[] ns = { "banana", "apple", "pear" };
排序前,这个数组在内存中表示如下:
┌──────────────────────────────────┐ ┌───┼──────────────────────┐ │ │ │ ▼ ▼ ┌───┬─┴─┬─┴─┬───┬────────┬───┬───────┬───┬──────┬───┐ns ─────>│░░░│░░░│░░░│ │"banana"│ │"apple"│ │"pear"│ │ └─┬─┴───┴───┴───┴────────┴───┴───────┴───┴──────┴───┘ │ ▲ └─────────────────┘
调用Arrays.sort(ns);
排序后,这个数组在内存中表示如下:
┌──────────────────────────────────┐ ┌───┼──────────┐ │ │ │ ▼ ▼ ┌───┬─┴─┬─┴─┬───┬────────┬───┬───────┬───┬──────┬───┐ns ─────>│░░░│░░░│░░░│ │"banana"│ │"apple"│ │"pear"│ │ └─┬─┴───┴───┴───┴────────┴───┴───────┴───┴──────┴───┘ │ ▲ └──────────────────────────────┘
原来的3个字符串在内存中均没有任何变化,但是ns
数组的每个元素指向变化了。
练习
请思考如何实现对数组进行降序排序:
// 降序排序import java.util.Arrays;public class Main { public static void main(String[] args) { int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 }; // 排序前: System.out.println(Arrays.toString(ns)); // TODO: // 排序后: System.out.println(Arrays.toString(ns)); if (Arrays.toString(ns).equals("[96, 89, 73, 65, 50, 36, 28, 18, 12, 8]")) { System.out.println("测试成功"); } else { System.out.println("测试失败"); } }}朋友圈 输入:huany6880 添加冠亦老师 对于学习Java还有相关的一切疑惑与难题,皆可随时私信我咨询,(Java、人工智能方向)和Java架构师路线图、面试题资料等等
小结
常用的排序算法有冒泡排序、插入排序和快速排序等;
冒泡排序使用两层for
循环实现排序;
交换两个变量的值需要借助一个临时变量。
可以直接使用Java标准库提供的Arrays.sort()
进行排序;
对数组排序会直接修改数组本身。
转载地址:https://blog.csdn.net/ITHHH111/article/details/124126490 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月12日 02时27分34秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
django开发-django和tornado的不同
2019-04-21
行内元素有哪些?块级元素有哪些? 空(void)元素有那些?
2019-04-21
220. Contains Duplicate III
2019-04-21
vue+node全栈移动商城【8】-vant新建注册页面
2019-04-21
JavaScript五十问——对比来说CSS的Grid与FlexBox(下篇)
2019-04-21
枚举的使用示例
2019-04-21
如何导入golang.org的包
2019-04-21
猴子数据让你深刻了解微信富媒体
2019-04-21
浅谈深拷贝和浅拷贝
2019-04-21
区块链技术特点之去中心化特性
2019-04-21
柯里化
2019-04-21
Spring Cloud Gateway 使用 Token 验证
2019-04-21
Spring源码分析:声明式事务梳理
2019-04-21
记一次前端面试试水笔记
2019-04-21
为什么大家觉得前端开发很难做下去?关于我的一些思考
2019-04-21
Quick BI 的模型设计与生成SQL原理剖析
2019-04-21
Android入门第一课之Java环境搭建
2019-04-21
双11奇迹背后的大数据平台,不喧哗,自有声!
2019-04-21
【C++】为什么可以while(std::cin >> input)
2019-04-21
前端技术周刊 2018-12-03:DOM
2019-04-21