@


Part4:数组及其常用操作

  • 数组:具有相同数据类型的数据的集合,可以存储基本数据类型的数据和引用类型的数据。数组是在内存中分配的一连串的空间。
  • 声明方法:(以整型数组为例)

      一维数组:int[] array 或 int array[];

      二维数组:int[][] array 或 int array[][];
  • Java语言中声明数组时不能指定其长度(数组中元素的数),应该是

            int[] array = new int[10];

Example01:将二维数组的行列交换

运行结果:



实现代码:

  1. public class Example01 {
  2. public static void main(String[] args) {
  3. int[][] array = {{1,2,3},{4,5,6},{7,8,9}};
  4. System.out.println("行列调换前:");
  5. exchange(array);
  6. int[][] newArray = new int[array.length][array.length];
  7. for (int i = 0;i<array.length;i++) { //调整数组行列数据
  8. for (int j = 0; j < array.length; j++) {
  9. newArray[i][j] = array[j][i];
  10. }
  11. }
  12. System.out.println("行列调换后:");
  13. exchange(newArray);
  14. }
  15. public static void exchange(int[][] array){
  16. for (int i = 0;i<array.length;i++){ //遍历数组
  17. for (int j = 0;j<array.length;j++){
  18. System.out.print(array[i][j]+"\t");
  19. }
  20. System.out.println();
  21. }
  22. }
  23. }

要点: 创建两个相同大小的数组,并使用双层的for循环遍历这两个二维数组,同时把新数组与原数组的行列索引交换进行元素赋值,从而实现行列互换的功能。


Example02:使用选择排序法对数组进行排序

  • 选择排序(Selection Sort)是一种简单直观的排序算法。

    每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

  • 过程如下:

      初始数组  【63 4 24 1 3 15】

      第一趟排序 【4 24 1 3 15】 63

      第二趟排序 【4 1 3 15】 63 24

      第三趟排序 【4 1 3】 15 24 63

      第四趟排序 【1 3】 4 15 24 63

      第五趟排序 【1】 3 4 15 24 63

    运行结果:



    实现代码:

    1. import java.util.Random;
    2. public class Example02 {
    3. public static int[] array = new int[10];
    4. public static void main(String[] args) {
    5. Random random = new Random();
    6. System.out.println("初始数组为:");
    7. for (int i = 0;i<array.length;i++){
    8. array[i] = random.nextInt(50);//生成50以内的随机数组
    9. System.out.print(array[i]+" ");
    10. }
    11. System.out.println("\n选择排序后的数组为:");
    12. SelectSort(array);
    13. }
    14. public static void SelectSort(int[] array){
    15. int index = 0;
    16. for (int i = 0;i<array.length-1;i++) {
    17. index = i;
    18. for (int j = i+1; j < array.length; j++) {
    19. if (array[j]<array[index]) {
    20. index = j;
    21. }
    22. }
    23. //交换在array.length-i和index(最大值)位置的两个数
    24. if (i != index) {
    25. int temp = array[i];
    26. array[i] = array[index];
    27. array[index] = temp;
    28. }
    29. }
    30. for (int num:array) {
    31. System.out.print(num+" ");
    32. }
    33. }
    34. }
  • 要点:利用选择排序法从数组中挑选最大值并放在数组最后,而遇到重复的相等值不会做任何处理,所以如果程序允许数组有重复值的情况,建议使用选择排序法,因为它的数据交换次数较少,相对速度也会稍微提升,这取决于数组中重复值的数量。


Example03:使用冒泡排序法对数组进行排序

运行结果:



实现代码:

  1. import java.util.Random;
  2. public class Example03 {
  3. public static int[] array = new int[10];
  4. public static void main(String[] args) {
  5. Random random = new Random();
  6. System.out.println("初始数组为:");
  7. for (int i = 0; i < array.length; i++) {
  8. array[i] = random.nextInt(50);//生成50以内的随机数组
  9. System.out.print(array[i] + " ");
  10. }
  11. System.out.println("\n冒泡排序后的过程为:");
  12. BubbleSort(array);
  13. }
  14. public static void BubbleSort(int[] array){
  15. for (int i = 1;i<array.length;i++) {
  16. //比较相邻两个元素,较大的往后冒泡
  17. for (int j = 0; j < array.length - i; j++) {
  18. if (array[j] > array[j + 1]) {
  19. int temp = array[j]; //把第一个元素值保存到临时变量中
  20. array[j] = array[j + 1]; //把第二个元素值保存到第一个元素单元中
  21. array[j + 1] = temp; //把临时变量也就是第一个元素原值保存到第二个元素中
  22. }
  23. System.out.print(array[j]+" ");
  24. }
  25. System.out.print("【");
  26. for (int j = array.length-i;j<array.length;j++){
  27. System.out.print(array[j]+" ");
  28. }
  29. System.out.print("】\n");
  30. }
  31. }
  32. }
  • 要点:冒泡排序的基本思想是对比相邻元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面。冒泡算法在双层循环中实现,其中外层循环中实现,是要排序数组长度-1次。而内层循环主要是用于比较临近元素的大小,以确定是否交换位置,对比和交换次数依排序轮数而减少。

Example04:使用快速排序法对数组排序

  • 快速排序(Quick Sort)是对冒泡排序的一种改进,其排序速度相对较快。
  • 过程如下:(通常选第一个数据)


    先用基准值和最后一个值比较,直到找到第一个比基准值小的值才交换。找到这个值后,又从前往后开始比较,直到找到第一个比基准值大的值才交换。直到从前往后的比较索引>从后往前的索引,结束第一次循环。



运行结果:



实现代码:

  1. import java.util.Random;
  2. public class Example04 {
  3. public static int[] array = new int[10];
  4. public static void main(String[] args) {
  5. Random random = new Random();
  6. System.out.println("初始数组为:");
  7. for (int i = 0;i<array.length;i++){
  8. array[i] = random.nextInt(50);//生成50以内的随机数组
  9. System.out.print(array[i]+" ");
  10. }
  11. System.out.println("\n快速排序法的过程如下:");
  12. QuickSort(array,0,array.length-1);
  13. }
  14. public static void QuickSort(int[] array,int low,int high) {
  15. int min = low;
  16. int max = high;//最小索引和最大索引
  17. int key = array[low]; //分界点元素
  18. while (min < max) {
  19. //从后往前比较
  20. while ((min < max) && (array[max] >= key)) {
  21. //如果没有比关键值小的比较下一个,直到找到比分界点小的交换位置
  22. max--;
  23. }
  24. if (min < max){
  25. swap(array,min,max);
  26. min++;
  27. }
  28. while ((min < max) && (array[min] <= key)) {
  29. //直到找到比关键值大的交换位置
  30. min++;
  31. }
  32. if (min < max) {
  33. swap(array, min, max);//交换两个索引的值
  34. max--;
  35. }
  36. }
  37. //对key左边快排
  38. if (min > low) {
  39. QuickSort(array, low, min - 1);
  40. }
  41. //对key右边快排
  42. if (max < high) {
  43. QuickSort(array, min + 1, high);
  44. }
  45. }
  46. public static void swap(int swapArray[],int i,int j){
  47. int t = swapArray[i];
  48. swapArray[i] = swapArray[j];
  49. swapArray[j] = t;
  50. for (int k = 0;k<array.length;k++){
  51. System.out.print(array[k]+" ");
  52. }
  53. System.out.println();
  54. }
  55. }

要点:快速排序法的基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据小,然后再按此方法对这两部分数据进行快速排序。整个排序过程可以递归进行,以此使整个数据变成有序数列。

  • 快速排序还有更高效的实现方法,请尝试。------

Example05:使用直接插入法对数组进行排序

  • 插入排序的思想:将n个有序数存放在数组a中,要插入的数为x,首先确定x插在数组中的位置p,数组中p之后的元素都后移一个位置,空出a(p),并将x插入进去。

运行结果:



实现代码:

  1. import java.util.Random;
  2. public class Example05{
  3. public static int[]array=new int[7];
  4. public static void main(String[]args){
  5. Random random=new Random();
  6. System.out.println("初始数组为:");
  7. for(int i=0;i<array.length;i++){
  8. array[i]=random.nextInt(50);//生成50以内的随机数组
  9. System.out.print(array[i]+" ");
  10. }
  11. System.out.println("\n直接插入排序法后的数组为:");
  12. InsertSort();
  13. }
  14. public static void InsertSort(){
  15. int t,j;
  16. for(int i=1;i<array.length;i++){
  17. t = array[i];
  18. for (j = i-1;j >= 0 && array[j] > t;j--){
  19. array[j+1] = array[j]; //数组元素交换
  20. }
  21. array[j+1] = t;
  22. }
  23. for (int a:array){
  24. System.out.print(a+" ");
  25. }
  26. }
  27. }

  • 在使用排序算法时,开发人员必须手动编写一堆代码,有的实现起来比较麻烦。Java的Arrays类提供了sort(),使用该方法对数组进行排序,大大降低了数组排序的难度。

Example06:使用sort()方法对数组排序

运行结果:



代码实现:

  1. import java.util.Arrays;
  2. import java.util.Scanner;
  3. public class Example06 {
  4. public static void main(String[] args) {
  5. Scanner scanner = new Scanner(System.in);
  6. System.out.println("请输入:");
  7. String s = scanner.nextLine();
  8. String[] array = s.split(" "); //拆分输入的数组
  9. int[] newArray = new int[array.length]; //创建整型数组
  10. System.out.println("初始数组为:");
  11. for (String string : array){
  12. System.out.print(string+" ");
  13. }
  14. for (int i = 0;i<array.length;i++){ //初始化整型数组
  15. newArray[i] = Integer.parseInt(array[i]);
  16. }
  17. Arrays.sort(newArray); //使用sort()方法对整型数组排序
  18. System.out.println("\nsort()排序后的结果为:");
  19. for (int a : newArray){
  20. System.out.print(a+" ");
  21. }
  22. }
  23. }
  • 要点:Arrays类提供了创建、操作、搜索和排序数组的方法。Arrays类位于java.util包,它是数组的一个工具类,包含很多方法,它有很多重载格式,可以接收任何数据类型的数组并执行不同类型的排序。

Java实例 Part4:数组及其常用操作的更多相关文章

  1. Java-Runoob-高级教程-实例-方法:02. Java 实例 – 输出数组元素

    ylbtech-Java-Runoob-高级教程-实例-方法:02. Java 实例 – 输出数组元素 1.返回顶部 1. Java 实例 - 输出数组元素  Java 实例 以下实例演示了如何通过重 ...

  2. ylbtech-Java-Runoob-高级教程-实例-数组:15. Java 实例 – 判断数组是否相等

    ylbtech-Java-Runoob-高级教程-实例-数组:15. Java 实例 – 判断数组是否相等 1.返回顶部 1. Java 实例 - 判断数组是否相等  Java 实例 以下实例演示了如 ...

  3. Java-Runoob-高级教程-实例-数组:14. Java 实例 – 在数组中查找指定元素

    ylbtech-Java-Runoob-高级教程-实例-数组:14. Java 实例 – 在数组中查找指定元素 1.返回顶部 1. Java 实例 - 在数组中查找指定元素  Java 实例 以下实例 ...

  4. Java-Runoob-高级教程-实例-数组:11. Java 实例 – 删除数组元素

    ylbtech-Java-Runoob-高级教程-实例-数组:11. Java 实例 – 删除数组元素 1.返回顶部 1. Java 实例 - 删除数组元素  Java 实例 以下实例演示了如何使用 ...

  5. Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un

    ylbtech-Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素 1.返回顶部 1. Java 实例 - 查找数组中的重复元素  Java 实例 以下实例 ...

  6. Java-Runoob-高级教程-实例-数组:03. Java 实例 – 获取数组长度-*

    ylbtech-Java-Runoob-高级教程-实例-数组:03. Java 实例 – 获取数组长度 1.返回顶部 Java 实例 - 获取数组长度  Java 实例 本文我们将为大家介绍如何使用数 ...

  7. pandas_一维数组与常用操作

    # 一维数组与常用操作 import pandas as pd # 设置输出结果列对齐 pd.set_option('display.unicode.ambiguous_as_wide',True) ...

  8. JavaScript之数组的常用操作函数

    js对数组的操作非常频繁,但是每次用到的时候都会被搞混,都需要去查相关API,感觉这样很浪费时间.为了加深印象,所以整理一下对数组的相关操作. 常用的函数 concat() 连接两个或更多的数组,并返 ...

  9. js对数组的常用操作

    在js中对数组的操作是经常遇到的,我呢在这就列一下经常用到的方法 删除数组中的元素: 1.delete方法:delete删除的只是数组元素的值,所占的空间是并没有删除的 代码: var arr=[12 ...

随机推荐

  1. ajax实现跨域请求

    因为现在一直用的mvc,所以就以mvc来说说ajax跨域提交. 首先说说跨域,简单说就是不同域名访问,比如在aaa.com访问bbb.com. 就拿招聘网站来说,分为两种用户,求职者和企业,求职者端是 ...

  2. python 装饰器的详细理解【多次实验】

    demo: # 装饰器其实就是对闭包的使用 print('haha嘻嘻') def hot(): print('知道') def dec(fun): print("call dec" ...

  3. 简说mvc路由

    首先我们通过在Global.asax中的Application_Start将路由信息注册到RouteTable的Routes静态属性中.如下代码所示: public class RouteTable ...

  4. Spring学习---Spring中利用jackson进行JSON转换

    Spring中利用jackson进行JSON转换 import java.util.List; import com.fasterxml.jackson.core.JsonProcessingExce ...

  5. Linux sftp命令详解

    sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的网络的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 ...

  6. 编程语言——C----细节

    2017-09-27  18:40:47 程序设计的基本概念 1.计算机语言:把人与计算机之间交流的语言叫做计算机语言 1)计算机语言分为高级语言和低级语言 2)高级语言:远离硬件 3)低级语言:贴近 ...

  7. CentOS7.4 Keepalived+LVS 负载均衡 后台节点健康检查

    主机信息 VIP 10.10.10.55 LVS01 10.10.10.59 Web01 10.10.10.60 Web02 10.10.10.61 一.apache简单配置 1.(10.10.10. ...

  8. Github文件夹下载到本地

    1.如图:需要将以下文件夹下载到本地. https://github.com/aspnet/Docs/tree/master/aspnet/mvc/overview/getting-started/i ...

  9. XtraBackup出现 Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

    解决办法1.建立一个软连接 ln -s /dat/data/mysql/mysql.sock /var/run/mysqld/mysqld.sock 解决办法2:指定--host=127.0.0.1

  10. 排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

    常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结 ...