**

Java学习 第三章 数组(三)排序算法

**
主要内容:排序算法、排序算法横向比较、Arrays工具类的使用、数组常见异常
1.数组中涉及到的常见算法:排序算法

1.1 排序算法分类:内部排序和外部排序

1.2 十大内部排序算法

冒泡排序、快速排序:会手写
堆排序、归并排序:知道排序思想

2.冒泡排序:

实现过程:

public class BubbleSortTest {public static void main(String[] args) {int[] arr = new int[] {43,32,76,-98,0,64,33,-21,32,99};//冒泡排序for(int i = 0;i<arr.length;i++) {for(int j = 0;j< arr.length-1-i;j++) {if(arr[j]>arr[j+1]) {int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}            for(int i = 0;i<arr.length;i++) {System.out.print(arr[i]+"\t");}
}
}

3.快速排序:


实现过程:

public class QuickSort {private static void swap(int[] data, int i, int j) {int temp = data[i];data[i] = data[j];data[j] = temp;}private static void subSort(int[] data, int start, int end) {if (start < end) {int base = data[start];int low = start;int high = end + 1;while (true) {while (low < end && data[++low] - base <= 0);while (high > start && data[--high] - base >= 0);if (low < high) {swap(data, low, high);} else {break;}}swap(data, start, high);subSort(data, start, high - 1);//递归调用subSort(data, high + 1, end);}}public static void quickSort(int[] data){subSort(data,0,data.length-1);}public static void main(String[] args) {int[] data = { 9, -16, 30, 23, -30, -49, 25, 21, 30 };System.out.println("排序之前:\n" + java.util.Arrays.toString(data));quickSort(data);System.out.println("排序之后:\n" + java.util.Arrays.toString(data));}
}

4.各种排序算法性能比较:

重点:冒泡排序:O(n^2)
快速排序:O(nlog2n)

5.Arrays工具类的使用

/*
* java.util.Arrays:操作数组的工具类,里面定义了很多操作数组的方法
*/
public class ArraysTest {public static void main(String[] args) {//1.boolean equals(int[] a,int[] b):判断两个数组是否相等。int[] arr1 = new int[]{1,2,3,4};int[] arr2 = new int[]{1,3,2,4};boolean isEquals = Arrays.equals(arr1, arr2);System.out.println(isEquals);//2.String toString(int[] a):输出数组信息。System.out.println(Arrays.toString(arr1));//3.void fill(int[] a,int val):将指定值填充到数组之中。Arrays.fill(arr1,10);System.out.println(Arrays.toString(arr1));//4.void sort(int[] a):对数组进行排序。Arrays.sort(arr2);System.out.println(Arrays.toString(arr2));//5.int binarySearch(int[] a,int key)int[] arr3 = new int[]{-98,-34,2,34,54,66,79,105,210,333};int index = Arrays.binarySearch(arr3, 210);   //返回下标,如果返回负数表示没找到。if(index >= 0){System.out.println(index);}else{System.out.println("未找到");}}
}

6.数组中的常见异常
1.数组角标越界的异常:ArrayIndexOutOfBoundsExcetion
2.空指针异常:NullPointerException

public class ArrayExceptionTest {public static void main(String[] args) {//1. 数组角标越界的异常:ArrayIndexOutOfBoundsExcetionint[] arr = new int[]{1,2,3,4,5};for(int i = 0;i <= arr.length;i++){System.out.println(arr[i]);}System.out.println(arr[-2]);System.out.println("hello");//2.2. 空指针异常:NullPointerException//情况一:int[] arr1 = new int[]{1,2,3};arr1 = null;System.out.println(arr1[0]);//情况二:int[][] arr2 = new int[4][];System.out.println(arr2[0][0]);//情况三:String[] arr3 = new String[]{"AA","BB","CC"};arr3[0] = null;System.out.println(arr3[0].toString());}
}

Java学习 第三章 数组(三)排序算法相关推荐

  1. Java学习 第三章 数组(一)一维数组

    第三章 数组 3-1 数组的概述 数组:多个相同类型数据按一定的顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理. 数组相关概念: 数组名.下标(索引.角标).元素.数组的长 ...

  2. JavaScript核心原理精讲第三章 数组原理和排序

    07-数组原理(上):帮你梳理眼花缭乱的数组 API 我在上一讲为你剖析了闭包这个难点,带你了解了作用域.闭包产生的原因及表现形式.那么这一讲,我们一起来手工实现一个 JSON.stringify 的 ...

  3. 【黑马程序员】 学习笔记 - Java数组及排序算法

    ----------------------android培训.java培训.期待与您交流!---------------------- JAVA数组及排序算法 一  数组 1.定义 定义:有联系的一 ...

  4. 漫画:三种 “奇葩” 的排序算法

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 在算法的世界里,有许多高效率的排序算法,比如快速排序.归并排序.桶 ...

  5. 第三章第三十题(当前时间)(Current time)

    第三章第三十题(当前时间)(Current time) *3.30(当前时间)修改编程练习题2.8,以12小时时钟制显示小时数. 下面是一个运行示例: Enter the time zone offs ...

  6. C语言中数组的排序算法详解——选择法、冒泡法、交换法、插入法、折半法

    选择法排序 选择法排序是指:如果要把一个数组从小到大排列,那么就从该数组中依次选择最小的数字来排序.从第一个数字开始,将第一个数字与数组中剩下数字中最小的那一个交换位置,然后将第二个数字与剩下数字中最 ...

  7. Shell数组以及排序算法

    Shell数组以及排序算法 数组 一.定义数组 1.数组包括的数据类型 2.获取数组长度 3.读取某个下标赋值 二.数组遍历 三.数组切片 四.数组替换 五.数组删除 六.数组追加元素 七.向函数传数 ...

  8. Java学习 第三章 数组(二)多维数组

    多维数组的使用 由数组构成的数组 二维数组: ① 二维数组的声明和初始化 ② 如何调用数组的指定位置的元素 ③ 如何获取数组的长度 ④ 如何遍历数组 ⑤ 数组元素的默认初始化值 :见ArrayTest ...

  9. 《学习JavaScript数据结构与算法》第三章 数组

    文章目录 前言 一.创建 && 初始化数组 二.操作数组 push-添加元素于末尾 unshift-添加元素于开头 pop-从数组末尾开始删除元素 shift-从数组开头开始删除元素 ...

最新文章

  1. 北斗导航 | 基于MATLAB的卫星轨道模拟
  2. [leetcode]剑指offer32-1.从上到下打印二叉树
  3. SQL Server各个版本功能比较
  4. JavaScript数组迭代方法(图解)
  5. [].slice.call
  6. java 注解scheduler_JAVA注解@Scheduled 不执行
  7. 你需要知道的、有用的 Python 功能和特点
  8. Java - Java Mail邮件开发(2)springboot +Java Mail + Html
  9. 小米3c虚拟服务器,小米路由器3C固件逆向与测评-新手向
  10. flex学习笔记 数据验证
  11. 工业机器人技术试题_《工业机器人技术基础》课程试卷A卷
  12. postman怎么设置中文
  13. 胸片和CT断层图像是怎么来的?
  14. 惠普服务器故障代码_HP服务器常见代码
  15. 如何在服务器发布网站
  16. Python OS模块详解(完善版本)
  17. squid配置透明代理并支持Https及http、https拦截
  18. FFmpeg功能命令集合(超详细)
  19. 2021年度训练联盟热身训练赛第一场 A.Weird Flecks, But OK (最小覆盖圆)
  20. vs2019新建一个html项目,VS2019 自定义项目模板的实现方法

热门文章

  1. 测试驱动开发–双赢策略
  2. Java 7:尝试资源
  3. linux下检测硬盘,【转载】linux下硬盘监控诊断工具SmartTools
  4. MacBook如何快速显示桌面
  5. Unix 下的 vim 如何使用系统剪贴板
  6. Windows 命令终端(CMD)的快捷键
  7. 数学建模python教材推荐_数模竞赛专攻python应该准备什么?
  8. Windows内存修改初篇
  9. php劫持代码,利用php来嗅探劫持服务器数据
  10. 是vans_硬核复刻,就服VANS棋盘格