Java基础——冒泡排序、选择排序、快速排序

目录

一、冒泡排序

二、选择排序

三、插入排序


一、冒泡排序

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个,即需要进行length-1次。

第一次是对n个数进行n-1次比较,进行到最后第n个的一个是最大的;

第二次是对n-1个数进行n-2次比较,进行到最后第n-1个的一个是最大的;

......

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

代码案例:

package src.day808;
​
import java.util.Arrays;
import java.util.Random;
​
public class Morning02 {
    public static void main(String[] args) {
        int[] array = new int[10];
        Random number = new Random();
        System.out.println("随机生成数组为:");
​
        for (int i = 0; i < array.length; i++) {
            array[i] = number.nextInt(0,100);
        }
        for (int i = 0; i < array.length-1; i++) {//遍历次数
            for (int j = 0; j < array.length-1-i; j++) {//下标,
                if (array[j] >array[j+1] ) {
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j+1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(array));
    }
}

二、选择排序

选择排序是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,继续放在起始位置知道未排序元素个数为0。

  选择排序的步骤:

1>首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。 2>再从剩余未排序元素中继续寻找最小(大)元素,然后放到未排序序列的起始位置。 3>重复第二步,直到所有元素均排序完毕。

img

package src.day808;
​
import java.util.Arrays;
//快速排序
public class Afternoon01 {
    public static void main(String[] args) {
        int[] arr = new int[]{51,63,28,77,15,46,73};
​
        for (int i = 0; i < arr.length-1 ; i++) {//比较的次数
            int min = i;//默认将a[0]当作是最小的值
            for (int j = 1+i; j < arr.length; j++) {//是被比较的数的下标。所以是从j=1+i(第二个数开始)
                if(arr[min]>arr[j]){//若51>63,为false,继续j++。若51>28时
                    min = j;//将j = 2赋给min,a[0]就变成了a[2],28暂时成为最小值
                }
            }
            int temp = arr[i];//一轮循环完后,将最小值与第一个元素进行交换,第一个最小值就判断出来了。继续循环下去。
            arr[i] = arr[min];
            arr[min] = temp;
        }
        System.out.println(Arrays.toString(arr));
    }
}

三、插入排序

插入排序也是一种常见的排序算法,插入排序的思想是:将初始数据分为有序部分和无序部分,每一步将一个无序部分的数据插入到前面已经排好序的有序部分中,直到插完所有元素为止。   插入排序的步骤如下:每次从无序部分中取出一个元素,与有序部分中的元素从后向前依次进行比较,并找到合适的位置,将该元素插到有序组当中。

image-20230808224414791

案例:

package src.day808;
​
import java.util.Arrays;
//插入排序
public class Afternoon02 {
    public static void main(String[] args) {
        int[] arr = new int[]{53,51,28,77,15,46,73};
        //相邻两个数字作比较
        for (int i = 1; i <arr.length ; i++) {
            int ccurrent = arr[i];//定义被比较的第二个值
            int preIndex = i-1;//定义第一个值的下标
            //跟前一个数字作比较
        while (preIndex >= 0 && arr[preIndex] > ccurrent){//当下标小于零时,程序不再执行,当第前面一个值比后面一个值大时
            arr[preIndex+1] = arr[preIndex];//把大的数字往后赋值,相当于给a[0]最小值腾位置
            preIndex--;//一直往前循环
            }
        arr[preIndex+1]= ccurrent;//当while循环循环到最后时,preindex的值已经成为负一(a[-1]),所以要将下标加1,将最小值赋给a[0]
        }
        System.out.println(Arrays.toString(arr));//输出
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值