【每周至少一篇 160727】简单的选择问题(select problem)_Java

第一篇博客,简单介绍少煽情,为了生存,代码大跃进。放置的第一篇博客主要是为了让两位同伴交流用Java编程,更重要的是让3年后的自己看到当初写的代码有多low.
在阅读数据结构与算法分析Java描述的正文第一页时,它首先提出了一个简单问题:设有一组N个数而要确定其中第K个最大者。我们称之为**选择问题(select problem)**。书上首先给出了两种常见的low算法,我就简单的实现了这两个low算法
- 第一种:将这N个数据读进一个数组中,再通过某种简单的算法,比如冒泡排序,以递增顺序将数组排序,然后返回位置k上的元素。
- 第二种:将前k个元素读入数组并对其排序。接着将剩余的元素逐个读入。当新元素被读到时,如果它小于数组中的第k个元素则忽略之,否则将其放入数组中正确位置,同时将数组中的一个元素挤出数组。当算法终止时,位于第K位置上的元素作为答案返回。

将第二种方法编写的代码放到下面:

这里写代码片
package chapter_one;

import java.util.*;

public class SelectNumber {
    public static void main(String[]    args){

        System.out.println("please enter the numder of figures:");
        Scanner console = new Scanner(System.in);
        int totalNumber = console.nextInt();
        int[] a = new int[totalNumber];

        System.out.println("please enter" + totalNumber + "numbers(separate number with blank):");
        for(int i = 0; i < totalNumber; i++){
            a[i] = console.nextInt();
        }

        System.out.println("Please enter K:");
        int selected =console.nextInt();
        System.out.println("The No." + selected + " number is:" + selectNum(a, selected-1));
    }

    public static int selectNum(int[] a, int k){

//      int b[] = new int[k];
//      //LS不同长度数组的赋值方式?
//      for(int i = 0; i < k; i++){
//          b[i] = a[i];
//      }
        //将数组中的前k个元素进行排序
        for(int i = 1; i < (k + 1); i++){
            int temp = a[i];
            for(int j = i-1; j >= 0; j--){
                if(temp > a[j])
                    a[j+1] = a[j];
                else{
                    a[j+1] = temp;
                    break;
                }
            }
        }
        //将后面的数值插入到前排序当中
        for(int i = (k + 1); i < a.length; i++){
            if(a[i] > a[k]){
                int temp = a[i];
                for(int j = k; j >= 0; j--){
                    if(temp > a[j])
                        a[j+1] = a[j];
                    else{
                        a[j+1] = temp;
                        break;
                    }
                }
            }else{
                continue;
            }
        }
        return a[k];
    }
}

写完这个low代码后,我自己总结:

代码编写总结

  • 1、编写Java代码的过程中对包装类的熟悉度决定你会不会用Java
  • 2、我这是用java语言写的C代码(要哭),还得加油练
  • 3、输入输出占了一大坨,不晓得怎么解决;代码中命名存在很大问题,可读性比较差

博客编写总结

  • 1、总的来说,废话太多,还没有练成精炼的习惯

    两位小伙伴帮忙看看,提提意见。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值