java一个二分排序,要求输入10个整数,输出排序结果。

//郑州轻工业大学
//题号:实验二 第一题
//题目:请写出一个二分排序,要求输入10个整数,输出排序结果。二分排序的工作原理是不断的依次将元素插入前面已排好序的序列中。在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。
————————————————
这题比较难,关键在于二分排序,不太好理解
建议百度查一下资料
后面有完整代码连接:
适合新人学习或交作业

在这里插入图片描述

首先建立输入并储存数据

   int[] a = new int[10];      // 用于储存输入的数 10个
            Scanner sc=new Scanner(System.in);
            for (int i=0;i<10;i++)
            {
                System.out.println("请输入第:"+(i+1)+"个数");
                a[i]=sc.nextInt();
                
            }

然后准备一堆数用来储存数据与比较

            int i, j;
            int left, right, mid;
            int temp;          //用于记录中间无序值

然后是重点开始了‘
首先找到数组中第一个无序的数,保存为temp

 /* 找到数组中第一个无序的数,保存为temp */
                if (a[i] < a[i - 1]) {
                    temp = a[i];
                } else {
                    continue;
                }
                /* 找到数组中第一个无序的数,保存为temp */

然后用二分排序对无序数进行排序

            /* 二分查询开始 */
                left = 0;
                right = i - 1;
                while (left <= right) {
                    mid = (left + right) / 2;     //这里注意如果是奇数  3/2=1
                    if (a[mid] > temp) {
                        right = mid - 1;
                    } else {
                        left = mid + 1;
                    }
                }
                /* 二分查询结束,此时a[left]>=a[i],记录下left的值 */

                /* 将有序数组中比要插入的数大的数右移 */
                for (j = i; j > left; j--) {
                    a[j] = a[j - 1];
                }
                /* 将有序数组中比要插入的数大的数右移 */

                // 将left位置赋值为要插入的数
                a[left] = temp;

然后就完成了一次排序,既把一个数通过二分法排成了有序
然后把上面的方法放进一个循环中重复几次就可以了

——

如果你上了百度,代码也看了,还是不理解的话,教你一个方法
把整个代码,全部都打上暂停,一步一步调试,走一遍流程,能很好的帮助你理解,
像这样
在这里插入图片描述
在这里插入图片描述

完整代码:https://download.csdn.net/download/muMason/54822191
超链接:完整代码
新人制作不易,真的是一个bug改一天!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木心Fx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值