| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 07_星仔带你学Java之数组算法篇 -> 正文阅读 |
|
[数据结构与算法]07_星仔带你学Java之数组算法篇 |
资料和代码存放地址:《华星详谈-学习中心》。开源项目持续更新中 目录 一、排序算法排序:按照指定的顺序排列出来。共分为升序(从小到大)和降序(从大到小)两种方式。 1.1、排序的分类:选择排序(直接选择排序、堆排序) 交换排序(冒泡排序、快速排序) 插入排序(直接插入排序、二分法插入排序、Shell排序) 归并排序等。 接再来星仔主要讲解冒泡,选择,插入排序,当然在开发中因为性能问题,我们都不会自己写排序算法,不过排序在笔试题里却是常客。 我们都以以下这个需求为背景:若有下列int类型数组需要排序 int[] arr = {2,9,6,7,4,1}; 1.2、冒泡排序(Bubble Sort):这是最简单的排序法,基本思路:对未排序的各元素从头到尾依次比较相邻的两个元素大小关系,若大于则交换位置,经过第一轮比较排序后可得出最大值,然后使用同样的方法把剩下的元素逐个比较即可。 可以看出若有N个元素,那么一共要进行N-1轮比较,第M轮要进行N-M次比较。(若6个元素,要进行6-1轮比较,第一轮比较6-1次,第三轮比较6-3次)。 🍋冒泡排序算法分析 🍋冒泡排序Java代码
1.3、选择排序(Selection Sort):基本思路:选择某个索引位置的元素,然后和后面元素依次比较,若大于则交换位置,经过第一轮比较排序后可得出最小值,然后使用同样的方法把剩下的元素逐个比较即可。 可以看出选择排序,第一轮会选出最小值,第二轮会选出第二小的值,直到最后。 第一轮从arr[0]和后面元素相比较,第二轮从arr[1]和后面的元素相比较,依次类推。N个数要进行N-1轮。选择排序每一轮只进行一次交换,相对于冒泡排序效率高一些。 🍋选择排序分析 ? 🍋选择排序代码
ps:总的来说,冒泡排序的和选择排序实现方式基本上都是一样的,他们之前的区别在于冒泡排序是比较的最大值,而选择排序比较的是最小值。 二、数组的搜索算法数组的搜索算法:从指定数组中去搜索某一个元素的索引是多少. ? 方式1:线性搜索(从头搜到尾/从尾搜到头)。调用indexOf/lastIndexOf方法。 ????????????? 对于元素过多的数组性能极低;当有N个元素时,循环次数= (N + 1) / 2; ? 方式2:二分搜索法/二分查找法/折半查找 ?????????????? 前提:数组元素必须有顺序,当数据量很大时适宜采用该方法。采用二分法查找时,数据需是排好序的。 2.1、搜索算法实践猜数游戏: 一个朋友让你猜他正在想的一个从1到100之间的数,等你猜了,他会告诉你三种结果中的一个:你猜的比他想的大,或小,或猜中了。 为了能用最少的次数猜中,必须从50开始猜。如果他说你猜的小了,那么就能推出哪个数在50到100之间,所以马上猜75。但如果他说猜大了,你也能明白哪个说在1到50之间,所以马上猜25。如此重复,范围越来越小,直到猜到为止。 ? 实现代码如下:
三、Java自带数组工具类Arrays数组的算法操作使用太频繁了,所以SUN公司就直接在JDK中提供了一个数组的工具类(Arrays)。 ? java.util.Arrays类: 1、int binarySearch(type[] arr,type key)? 使用二分法查找数组里某元素并返回其索引,若找不到返回负数。 2、void sort(type[] arr)? 使用调优后的快速法对指定数组排序。 3、String toString(type[] arr)? 返回指定数组内容的字符串表示形式。 4、public static type[] copyOf(type[] original, int newLength)? 复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。 使用注意:必须java.util.Arrays.方法(参数); |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 3:37:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |