毕业设计-数组变换03

从上两节毕业设计-数组变换01和毕业设计-数组变换02我们得到了b(n)和order(n),b(n)表示随机数组缩小后的数组,order(n)表示b(n)中相同元素出现的次序。今天我们要求的seq(n)是基于这两个数组,seq(n)表示b(n)下标的排列顺序,排序依据是b(n)下标对应的元素以及order(n)相同下标对应的元素。也就是说,首先看b(n)中的排序,当b(n)中元素相同,再看order(n)的元素顺序。

1b(n)=(2,1,3,4,5);
     order(n)=(1,1,1,1,1);
     seq(n)=(1,0,2,3,4);2b(n)=(5,1,4,3,1,2,5);
     order(n)=(1,1,1,1,2,1,2);
     seq(n)=(1,4,5,3,2,0,6);

求解思路1:直接对b(n)进行遍历,当b(n)中元素相同时,再考虑order(n)。
伪代码:

for i=1:n
   for j=1:n
       if b(seq(j))>b(seq(j+1))||b(seq(j))==b(seq(j+1))&&order(seq(j))>order(seq(j+1))
           seq=change(seq,j+1,j);
       end
   end
end

上述方法虽然可行,但是求出的seq是一连串的序列,无法看出b(n)中元素不同的下标在哪一块。这是有实际意义的,在需要考察实际意义的时候,就得注意对输出的结果进行区分,这样结果才能更符合人机交互的标准。
不妨称求解思路1求得的序列为seq1,最终输出为seq。
求解思路2:
对得到的se:1进行遍历,对于在b(n)中不同的元素的下标,进行插入一个‘-1’进行区分。在这路还需要考虑的就是最后输出的seq的长度,应该是n+max(b(n))-1。
代码实现:

 package biyesheji;
 
 public class Array_test03 {
 
     /**
      * After we get b(n) and order(n),we need use them to get sequence seq,
      * seq represents the order of index of b in different station
      */
 
    //create a function to generate seq

    public int[] get_seq(int[] b,int[] order){
        int[] seq1 = new int[b.length];
        int[] seq = new int[b.length+maxvalue(b)-1];
        int change = 0,i=0,j=0;
        for(i=0;i<b.length;i++)
            seq1[i] = i;
        for(i=0;i<b.length;i++){
            for(j=0;j<b.length-1;j++) {
                if(b[seq1[j]]>b[seq1[j+1]]||(b[seq1[j]]==b[seq1[j+1]]&&order[seq1[j]]>order[seq1[j+1]])) {
                    change = seq1[j];
                    seq1[j] = seq1[j+1];
                    seq1[j+1] = change;
                }   
            }   
        }

        //insert '-1' differ different station
        for(i = 0,j=0;i<seq1.length-1;i++) {
            if(b[seq1[i]]==b[seq1[i+1]])
                seq[j++] = seq1[i];
            else {
                seq[j++] = seq1[i];
                seq[j++] = -1;
            }
        }
        seq[j] = seq1[i];

        System.out.print("b=");
        show(b);
        System.out.println();
        System.out.print("order=");
        show(order);
        System.out.println();
        System.out.print("seq1=");
        show(seq1);
        System.out.println();
        System.out.print("seq=");
        show(seq);
        return seq;
    }

    public int maxvalue(int[] b){
        int maxvalue = 0;
        for(int i=0;i<b.length;i++){
            if(b[i] > maxvalue)
                maxvalue = b[i];
        }
        return maxvalue;
    }

    public void show(int[] seq){
        for(int value:seq)
            System.out.print(value+",");
    }

    public static void main(String[] args) {

        int[] b = {5,1,4,3,1,2,5};
        int[] order = {1,1,1,1,2,1,2};
        Array_test03 test = new Array_test03();
        test.get_seq(b, order);
    }
}

输出结果:
在这里插入图片描述
在这一节,我们讨论了求解b(n)的下标顺序序列,并说明了在实际意义情况下,应该如何让自己的输出更符合人机交互的理念。后续,小编将会推出毕业设计后续系列,敬请期待!下一节我们讨论,如何在给定一个和b(n)相同维度的数组time(n),找出b(n)中相同元素的脚标对应的time(n)中元素的最大值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值