超详细的Java实现冒泡排序、选择排序、插入排序[超容易理解]❀❀❀

冒泡排序

步骤分析及介绍

  1. 由下图可知,就是比较两个相邻的元素,大的数字将往后面移动(怎么实现后移动呢?),所以每次比较之后都会得到一个较大的数字放在最后,而放到最后的数字就不需要比较了,即每次比较后,相邻两个元素的比较次数都相对减少(相对减少多少呢?)。
  2. 接下来我们分析怎么将大的数字往后移动,这时候就需要一个中间变量temp,如果a[i]>a[i+1],我们就可以将a[i]赋值给temp,然后再将a[i+1]赋值给a[i],再将temp中的a[i]赋值给a[i+1],这样子就是实现了大的往后移了。
  3. 分析比较的轮数和比较次数,如下图,一共有九个数,我们需要比较8轮。
    第一轮------两两比较8次
    第二轮------两两比较7次
    第三轮------两两比较6次
    第四轮------两两比较5次

    第七轮------两两比较2次
    第八轮------两两比较1次

图片演示过程如下

在这里插入图片描述

代码实现

public class PaiXuDemo {
    public static void main(String[] args) {
    	//键盘实现输入
        Scanner scanner = new Scanner(System.in);
        //定义一个数组长度为5的数组
        int[] arr = new int[8];
        System.out.println("请输入5个数字");
        //使用for循环实现数组的数字输入
        for (int i=0;i<arr.length;i++){
            arr[i]=scanner.nextInt();
        }
        
     	//i表示比较的轮数,arr.length-1表示数组长度减一
		for (int i=0;i<arr.length-1;i++){
		//j表示两比较的次数
		            for (int j=0;j<arr.length-i-1;j++){
		            //实现数字大的往后移
		                if (arr[j]>arr[j+1]){
		                    int temp = arr[j];
		                    arr[j]=arr[j+1];
		                    arr[j+1]=temp;
		                }
		            }
		        }
		//使用for循环遍历输出数组中的每一个数字
        for (int n=0;n<arr.length;n++){
            System.out.print(arr[n]+" ");
        }
}

选择排序

步骤分析及介绍

1、如下图所示:我们可以看到它是以未排序的第一个位置的数字开始,依次从第二个数字开始往后逐个数字比较。当发现前面数字比后面的某一个位置的数字大时,就将前面的数字与后面这个数字交换位位置(这个怎么交换呢??),然后继续往后比较,前面比较完的数字就得到有序数字,经过多轮和多次比较将得到有序的数组元素(需要比较多少论和多少次呢)。
2、接下来我们分析怎么将前面的数字与后面的数字交换位置,这时候就需要一个中间变量temp,如果a[i]>a[j],我们就可以将a[i]赋值给temp,然后再将a[j]赋值给a[i],再将temp中的a[i]赋值给a[j],这样子就是实现了前面的数字与后面的数字交换位置
3、分析比较的轮数和比较次数,如下图,一共有7个数,我们需要比较6轮
第一轮------比较6次
第二轮------比较5次
第三轮------比较4次

第六轮------比较1次

图片演示过程如下

在这里插入图片描述

代码实现

//数组的定义以及键盘输入数组元素与冒泡排序一致,我这里就不再一写了哈哈哈哈!!!直接来重点代码!!!!!!!!!!!

// k控制轮数,这里从第一个数开始,比较的轮数即数组长度减一
  for (int k=0;k<arr.length-1;k++){
  //l控制每轮比较的次数,就是以前面的数的第二个数开始,前面的数与后面的每一个数字进行比较
            for (int l=k+1;l<arr.length;l++){
            //实现前面的数与后面的数交换位置
                if (arr[k]>arr[l]){
                    int temp = arr[k];
                    arr[k] = arr[l];
                    arr[l] = temp;
                }
            }
        }

插入排序

步骤分析及介绍

1.以第一个元素开始,该元素可以认为已经被排序,则取出下一个元素,在已经排序的元素序列中从后向前扫描,如果后面的一个元素和前面的元素比较,如果后面的元素比前面的小,则继续往前面比较,直到比前面某个数字大的时候,则将后面的元素插入到前面元素小的前面,也就是前面大的元素往后移一个位置,让后面比较的元素插入,然后结束比较。
2.如下图所示,一共比较7轮

图片演示过程如下

在这里插入图片描述

代码实现

//数组的定义以及键盘输入数组元素与冒泡排序一致,我这里就不再一写了哈哈哈哈!!!直接来重点代码!!!!!!!!!!!

//控制比较的轮数
	 for (int n=1;n<arr.length;n++){
            int temp = arr[n];
            //比较的次数
            for (int m=n;m>0;m--){
            //判断后面的数跟前面比较那个大
                if (temp < arr[m-1]){
                //将前面的数往后面移动留出位置给小的数插入
                    arr[m]=arr[m-1];
                    arr[m-1] = temp;
                }
            }
        }

小结

个人理解,大佬多多指点!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值