麻烦帮忙看下这个程序,多谢了,我写了一部分,但是不太对~多谢啦~

麻烦帮忙看下这个程序,多谢了,我写了一部分,但是不太对~多谢啦~
1. 写一个Java应用程序,完成以下功能:a) 接受用户输入的正整数n,随机产生n个大小为1到n之间的正整数。b) 接受用户输入要查找的正整数data(为1到n之间),在刚刚产生的n个数中查找数data的位置,找到则返回其位置,找不到则提示该数不存在。请同时记录查找该数进行比较的次数。c) (选做)对上述产生的n个数按照从小到大进行排序,在排好序的序列中用折半查找法查找data的位置,找到则返回其位置,找不到则提示该数不存在。请记录查找该数进行比较的次数。多次运行你的程序,比较两次查找需要的次数,哪种方法更快?

折半查找次数全都为0了,

159233 1年前 已收到1个回答 举报

wslg2005 幼苗

共回答了20个问题采纳率:95% 举报

优化过的代码:import java.util.Scanner;
public class SearchAndSort {
public static void main(String[] args) {
System.out.print("输入序列的长度 > ");
Scanner keyboard = new Scanner(System.in);
int listlen = keyboard.nextInt();

System.out.println("未排序的序列:");
int[] list = new int[listlen];
for (int i = 0; i < listlen; i++) {
list[i] = (int) (Math.random() * (listlen - 1) + 1);
System.out.print(list[i] + " ");
}
System.out.println("");

System.out.print("输入要查找的数 > ");
int keynum = keyboard.nextInt();

for (int i = 0; i < listlen; i++) {
if (keynum == list[i]) {
System.out.println("线性查找用了" + (i + 1) + "次比较");
System.out.println("数" + keynum + "在原序列中的位置是" + (i + 1));
break;
} else if (i == (listlen - 1))
System.out.println("没有找到该数!");
}
for (int a = 0; a < listlen; a++) {
for (int b = a + 1; b < listlen; b++) {
if (list[a] > list[b]) {
int temp = list[b];
list[b] = list[a];
list[a] = temp;
}
}
}
System.out.println("排序之后的序列为:");
for (int i = 0; i < listlen; i++) {
System.out.print(list[i] + " ");
}
System.out.println("");

int lower = 0, upper = listlen - 1, count = 0;
while (true) {
int mid = (lower + upper) / 2, listtemp = list[mid];
count++;
if (listtemp == keynum) {
System.out.println("折半查找用了" + count + "次比较");
System.out.println("数" + keynum + "在排序好的序列中的位置是" + (mid + 1));
break;
} else if (listtemp < keynum) {
lower = mid + 1;
} else {
upper = mid - 1;
}
if (lower > upper) {
System.out.println("里面没有这个数!");
break;
}
}
keyboard.close();
}
}

1年前

5
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 0.753 s. - webmaster@yulucn.com