java数组 中的插入排序习题算法简化

题目为:有一组乱序的字母{e,v,c,a, u,‘ ’},将它们按升序排列。
 要增加一个新的字母,将它插入字母序列,并保持升序。

注意:题意原意为数组{e,v,c,a,u}中原本就存在一个位置等待新加入的字母放入

在最开始选择从键盘输入一个字母,由于String类型无法转换为比它低一级的char类型,所以在键盘输入一个字母时,运用到了charAt()函数进行转换:

System.out.println("请输入一个新的字母");
        char nNum = input.next().charAt(0);

乱序数组定义后按照要求先进行排序:

char[] num ={'e','v','c','a','u',' '};
        Arrays.sort(num);

在输入新字母进行插入时,本渣进行了一系列的分段式分析

分别分为三段:1 输入的字母为最小值;2输入的字母为中间值;3输入的字母为最大值时:

(代码被我写的乱七八糟,一塌糊涂,复杂度高)

System.out.println("请输入一个新的字母");
        char nNum = input.next().charAt(0);
      //  System.out.print(nNum);//输出字母的值
        if(nNum<num[1]){
           // System.out.println("test0");
            num[0]=nNum;
            for (int i = 0; i <num.length; i++) {
                System.out.println("插入后:");
                System.out.print(num[i]+" ");
            }
        }else{
            for (int i = 2; i < num.length; i++) {
                if(nNum<num[i]){
                    for (int j = 0; j <i-1 ; j++) {
                        num[j]=num[j+1];
                    }
                    num[i-1]=nNum;
                  //  System.out.println("test1");
                    break;
                }
                else if(nNum>num[num.length-1]){
                    for (int j = 0; j <num.length-1; j++) {
                        num[j]=num[j+1];
                    }
                    num[num.length-1]=nNum;
                 //   System.out.println("test2");
                    break;
                }
            }

这真的是本着先把问题解决再进行优化的考虑,得出以上结果。

而在多次优化,以及询问大神哥哥之后,优化后的代码如下:

        int temp=-1;//在初始化时定义一个临时对象保存下标值
        System.out.println("请输入一个新的字母");
        char nNum = input.next().charAt(0);
        //  System.out.print(nNum);//输出字母的值
        for (int i =0; i <num.length-1 ; i++) {
            if(nNum>num[i+1]){
                num[i]=num[i+1];
                temp = i;
            }
        }num[temp+1]=nNum;

优化后真的简单太多有没有!所以真的很神奇很厉害啊~

猜你喜欢

转载自blog.csdn.net/guiguliang/article/details/81141211