JavaSe之生成随机数并插入到数组排序+快速查找
public class SelectSort {
public static void main(String[] args) {
// 生成随机数组
int[] array = new int[10];
Random random = new Random();
for (int i = 0; i < array.length; i++) {
array[i] = random.nextInt(100); // 生成0到99的随机数
}
// 打印排序前的数组内容
System.out.println("排序前的数组内容:");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
int n = array.length;
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (array[j] < array[minIndex]) {
minIndex = j;
}
}
int temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp;
}
System.out.println("排序后的数组内容:");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要查找的数字");
int search= scanner.nextInt();
//二分查找法
int leftIndex=0;
int midIndex;
int rightIndex=array.length-1;
while (leftIndex<=rightIndex){
midIndex=(leftIndex+rightIndex)/2;
if (array[midIndex] == search) {
System.out.println("下标为" + midIndex);
break;
} else if (array[midIndex] < search) {
leftIndex = midIndex + 1;
} else {
rightIndex = midIndex - 1;
}
if (leftIndex > rightIndex) {
System.out.println("不存在该数字");
}
}
scanner.close();
}
}
1.数组的查找比链表查找方便,链表需要从头一个个查找下去,而数组可以直接使用下标找到对应索引位置上的值
2.二分查找法是非常好用的查找方式,只需要定义三个指针,一个左指针,一个右边指针(右指针一般为数组长度-1,以为数组下标从0开始),中间的指针为(左指针+右指针)/2;只要左指针<=右指针,就说明中间还有数据,若左边指针>右边指针,说明中间没有要查的数据了。那指针怎么移动呢?简单来说,就是中间指针的值若大于要查找的值,那么就把右边指针移到中间指针位置,然后再继续计算出一个新的中间指针,准备下次比较;反之,中间指针的值若小于要查找的值,那么就移动左边指针到中间指针的位置,再继续算出新的一个中间指针,准备下次比较。(二分查找法有限制:1.必须是排序好的数组。2.左右指针的移动跟升序和降序有关系)