IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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之数组算法篇

?大家好,我是星仔。本博客收录于华星详谈-学习中心。本学习中心收集了Java整个技术体系的所有技术要点。每篇博客后面或者知识点结尾都附带有面试题,提供给大家巩固本章内容

为各位同胞们能够系统性的掌握整个Java技术体系而建立的学习中心。星仔正在努力的更新学习中心中的内容。望诸君共勉!!!

资料和代码存放地址:《华星详谈-学习中心》。开源项目持续更新中

GitHub - 17666555910/HuaXing-learningCenter: 华星详谈-学习中心。收集了Java目前市面上主要流行的技术细节以及对应的实现华星详谈-学习中心。收集了Java目前市面上主要流行的技术细节以及对应的实现. Contribute to 17666555910/HuaXing-learningCenter development by creating an account on GitHub.https://github.com/17666555910/HuaXing-learningCenterhttps://github.com/17666555910/HuaXing-learningCentericon-default.png?t=M3K6https://github.com/17666555910/HuaXing-learningCenter

目录

一、排序算法

1.1、排序的分类:

1.2、冒泡排序(Bubble Sort):

1.3、选择排序(Selection Sort):

二、数组的搜索算法

2.1、搜索算法实践

三、Java自带数组工具类Arrays


一、排序算法

排序:按照指定的顺序排列出来。共分为升序(从小到大)降序(从大到小)两种方式。

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代码

    /**
     * 冒泡算法
     *
     * @param arr
     * @return
     */
    public static int[] bubbleSort(int[] arr) {
        int temp;
        for (int i = 1; i <= arr.length - 1; i++) {
            for (int j = 1; j <= arr.length - i; j++) {
                if (arr[j - 1] > arr[j]) {
                    temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr;
    }

1.3、选择排序(Selection Sort)

基本思路:选择某个索引位置的元素,然后和后面元素依次比较,若大于则交换位置,经过第一轮比较排序后可得出最小值,然后使用同样的方法把剩下的元素逐个比较即可。

可以看出选择排序,第一轮会选出最小值,第二轮会选出第二小的值,直到最后。

第一轮从arr[0]和后面元素相比较,第二轮从arr[1]和后面的元素相比较,依次类推。N个数要进行N-1轮。选择排序每一轮只进行一次交换,相对于冒泡排序效率高一些。

🍋选择排序分析

?

🍋选择排序代码

    /**
     * 选择排序
     *
     * @param arr
     * @return
     */
    public static int[] electionSort(int[] arr) {
        int temp;
        for (int i = 1; i <= arr.length - 1; i++) {
            for (int j = 1; j <= arr.length - i; j++) {
                if (arr[j] < arr[j - 1]) {
                    temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr;
    }

ps:总的来说,冒泡排序的和选择排序实现方式基本上都是一样的,他们之前的区别在于冒泡排序是比较的最大值,而选择排序比较的是最小值。

二、数组的搜索算法

数组的搜索算法从指定数组中去搜索某一个元素的索引是多少.

? 方式1:线性搜索(从头搜到尾/从尾搜到头)。调用indexOf/lastIndexOf方法。

????????????? 对于元素过多的数组性能极低;当有N个元素时,循环次数= (N + 1) / 2;

? 方式2二分搜索法/二分查找法/折半查找

?????????????? 前提:数组元素必须有顺序,当数据量很大时适宜采用该方法。采用二分法查找时,数据需是排好序的。

2.1、搜索算法实践

猜数游戏

一个朋友让你猜他正在想的一个从1到100之间的数,等你猜了,他会告诉你三种结果中的一个:你猜的比他想的大,或小,或猜中了。

为了能用最少的次数猜中,必须从50开始猜。如果他说你猜的小了,那么就能推出哪个数在50到100之间,所以马上猜75。但如果他说猜大了,你也能明白哪个说在1到50之间,所以马上猜25。如此重复,范围越来越小,直到猜到为止。

?

实现代码如下:

    /**
     * 从arr数组中搜索key的元素,找到返回其索引,否则返回-1
     *
     * @param arr 排序后的数组
     * @param key 需要查询的元素
     * @return
     */
    public static int binarySearch(int[] arr, int key) {
        int low = 0;//最小的索引
        int high = arr.length - 1;//最大的索 引
        while (low <= high) {
            int mid = (low + high) >> 1;//中间索引
            int midVal = arr[mid];//中间的元索,猜测的值
            if (midVal > key) {//猪大了
                high = mid - 1;
            } else if (midVal < key) {//猪小了
                low = mid + 1;
            } else {
                return mid;
            }
        }
        return -1;
    }

三、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.方法(参数);

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-11 16:39:00  更:2022-05-11 16:40:49 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码