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