Java数组排序:比大小+冒泡排序+选择排序+插入排序

Java日报

部门:**大数据开发六部

姓名:cqmfx(阡陌飞絮)

日期:2020.10.25
备注:部分转自百度,CSDN,菜鸟,侵权删

大纲

一、数组介绍

二、排序

数组那些事

一、数组介绍

1、基本概念

数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标(length)。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 这些有序排列的同类数据元素的集合称为数组。

​ 数组是用于储存多个相同类型数据的集合

2、数组的基本特点:

​ (1) 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
​ (2 )其元素必须是相同类型,不允许出现混合类型。元素的类型可以 是Java 支持的任意类型
​ (3) 数组类型可以是任何数据类型,包括基本类型和引用类型。
​ (4)数组的元素在堆内存中被分配空间,并且是连续分配的

​ (5)使用new 关键字对数组进行 内存的分配。每个元素都会被jvm 赋予默认值。默认规则:整数:0 浮点数:0.0

	字符:\u0000 		布尔:false     引用数据类型:null。

​ (6)数组的元素都是有序号的,序号从0开始,0序的。称作数组的 下标、索引、角标

3、数组的声明:

(1)声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。
(2)声明一个数组的时候并没有数组真正被创建。
(3)构造一个数组,必须指定长度。

4、数组格式:

4.1、元素类型[ ] 数组名 = new 元素类型 [元素个数或数组长度];

int [] arr = new int [5];
dataType[] arrayRefVar = new dataType[arraySize];

[]:代表这是数组类型。

4.2、数组名:一个合法的标识符,命名规范 和 局部变量 规范一致。

4.3、new:是java 的关键字。用来向JVM申请内存的。
4.4、元素类型[元素个数] :决定了向JVM申请的内存空间的大小。
          大小:元素类型字节数 * 元素个数
元素的个数:只要是一个合法的java 表达式就可以。 返回一个int 类型的值即可

5、多维数组

多维数组可以看成以数组为元素的数组。可以有二维、三维、甚至更多维数组,但是实际开发中用的非常少。最多到二维数组

二、排序

0、找最大值(打擂台)

int [] array = {5,86,3,4,7,2,6};  //定义一个数组
//比大小(打擂主)
int temp = array [0];  //初始化temp
for (int i = 0;i <= 6; i++){   //变量i初始化,运行0-6次,挨个两两比较
    if (temp < array[i]){      //如果前一个(temp)比后一个(array[i]大)
        temp = array [i];      //则交换,最后得出最大(储存在temp里)的那个
    }
}
System.out.println(temp);

在这里插入图片描述

1、冒泡排序(Bubble Sort)

1.1、介绍

​ 冒泡排序(Bubble Sort)是常用的数组排序算法之一

​ 冒泡排序的基本思想是:对比相邻的元素值,如果满足条件就交换元素值把较小的元素值移动到数组前面把大的元素值移动到数组后面(也就是交换两个元素的位置),这样数组元素就像气泡一样从底部上升到顶部

​ 冒泡排序的算法比较简单,排序的结果稳定,但时间效率不太高

img

1.2、实操
        int bubbleSort [] = {5,9,3,7,8,22,1,45};  //定义数组
        //使用冒泡排序
        int temp = bubbleSort[0];   //初始化
        for (int i = 0;i < bubbleSort.length -1;i++){   //控制外循环的轮数
            for (int j = 0;j<bubbleSort.length - i - 1;j++){   //控制内循环两两之间比较的次数
                if (bubbleSort [j] > bubbleSort [j + 1]){
                    //两两比较  将大的冒泡到后面(><可控制大的\小的值放在前面、后面)
                    temp = bubbleSort[j];
                    bubbleSort [j] = bubbleSort [j + 1];    //比较后交换
                    bubbleSort [j + 1] = temp;
                }
            }
        }
        for (int i = 0;i < bubbleSort.length;i++){
            System.out.println(bubbleSort [i]);
        }

在这里插入图片描述

2、选择排序(SelctionSort)

2.1、基本思想

​ 在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;
​ 第二次遍历n-2个数,找到最小的数值与第二个元素交换;
​ …
​ 第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。

img

2.2、实操
        int[] selctionSort = {5, 9, 7, 12, 14, 1, 3};
        //选择排序
        for (int i = 0; i < selctionSort.length - 1; i++) {        //重复排序过程
            int min = i;                                           //每次从第i次比较,这样可以不再和前面的元素比较
            for (int j = i + 1; j < selctionSort.length; j++) {   //i+1是方便第i个元素和后面的比大小,就不会和自身比了
                if (selctionSort[j] < selctionSort[min]) {        //每个数和下标为零的数比较,找到其中最小的数
                    min = j;                                      //然后将值大的下标赋给原来的零下标=得到了最小的值
                }                                                 //到这步就相当于选择好最小的元素了
            }                                                     //下面进行排序,就是一直将最小的数挨个放到最前面
            int temp = selctionSort[i];                           //进行排序:将最小的数放到temp里面
            selctionSort[i] = selctionSort[min];                  //将下标为零的数放到selctionSort [j]里面
            selctionSort[min] = temp;                            //再将数组中最小的数(元素)放到下标为0的元素那儿
        }                                                        //这样循环一直将剩下元素中最小的数放到前面
        for (int i = 0; i < selctionSort.length; i++) {          //将排列好的数遍历打印出来
            System.out.println(selctionSort[i]);
        }

在这里插入图片描述

3、插入排序(Insertion Sort)

3.1、基本思想

​ 在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。

排序都采用就地在数组上实现具体算法描述如下:

  • 从第一个元素开始,该元素可以认为已经被排序;
  • 取出下一个元素,在已经排序的元素序列中从后向前扫描;
  • 如果该元素(已排序)大于新元素,将该元素移到下一位置;
  • 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
  • 将新元素插入到该位置后;
  • 重复步骤2〜5。

3.2、实操
int [] insertionSort ={5,6,7,1,9,3,2};
for (int i = 0;i < insertionSort.length - 1;i++) {
    for (int j = i + 1; j > 0; j--) {
        if (insertionSort[j] < insertionSort[j - 1]){
            int temp = insertionSort[j - 1];
            insertionSort[j - 1] = insertionSort[j];
            insertionSort[j] = temp;
        } else {
            break;
        }
    }
}
for (int i = 0;i < insertionSort.length;i++){
    System.out.println(insertionSort[i]);
}

在这里插入图片描述

4、待补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值