第一篇博客,简单介绍少煽情,为了生存,代码大跃进。放置的第一篇博客主要是为了让两位同伴交流用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、总的来说,废话太多,还没有练成精炼的习惯
两位小伙伴帮忙看看,提提意见。