Java 生成随机数并进行查找

Java 生成随机数并进行查找

顺次查找和折中查找

import java.util.Scanner;
public class text3 {
	public static void main(String args[]) {
	System.out.println("请输入你想产生的随机数的个数:");
	Scanner num = new Scanner(System.in);
	int n = 0;
	n = num.nextInt();
	int[] list = new int[n];
	int i;
	for(i=0;i<=(n-1);i++) {
		list[i] = (int)(Math.random()*n+1);
	}
	System.out.println("请输入你要查找的数:");
	int data=0;
	int t=0;
	data=num.nextInt();
	for(i=1;i<=(n-1);i++){
		if(data!=list[i]) {
			t++;
		}
	}
	System.out.println("查找的次数为:"+t+","+"查找的位置为:"+i);	
//对list进行排序
	for(i=0;i<=n-2;i++) {
		int j = 0;
		for(j=(i+1);j<=(n-1);j++) {
			if(list[i]>list[j]) {
				int m=0;
				m=i;
				i=j;
				j=m;
			}
		}
	}
//	在有序的list中折半查找data
	int low = 0;
	int high = 0;
	high = n-1;
	int mid = 0;
	mid = (low+high)/2;
	int steps = 0;
	while(low<=high) {
		steps++;
		if(list[mid]>data) {
			high = mid-1;
		}else if(list[mid]<data) {
			low = mid+1;
		}else {
			break;
		}
		mid =(low+high)/2;
	}
	System.out.println("折半查找比较的次数"+steps+",位置"+mid);
	}
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以帮你解决这个问题。首先,我会介绍一下快速排序和折半查找法的原理和实现,然后给出Java代码。 快速排序是一种基于比较的排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后再分别对这两部分记录继续进行排序,以达到整个序列有序的目的。快速排序的时间复杂度为O(nlogn)。 折半查找法是一种在有序数组中查找指定元素的算法。它的基本思想是将数组分成两部分,如果要查找的元素比中间元素小,则在左半部分继续查找;如果要查找的元素比中间元素大,则在右半部分继续查找;如果要查找的元素等于中间元素,则返回中间元素的位置。折半查找法的时间复杂度为O(logn)。 下面是Java代码实现: ```java import java.util.Arrays; import java.util.Random; public class QuickSortAndBinarySearch { public static void main(String[] args) { int[] arr = generateRandomArray(14); System.out.println("Original array: " + Arrays.toString(arr)); quickSort(arr, 0, arr.length - 1); System.out.println("Sorted array: " + Arrays.toString(arr)); int target = 5; // 要查找的数值 int index = binarySearch(arr, target); if (index == -1) { System.out.println("The target value does not exist in the array."); } else { System.out.println("The target value is at index " + index + " in the array."); } } // 生成指定长度的随机数组 public static int[] generateRandomArray(int length) { int[] arr = new int[length]; Random random = new Random(); for (int i = 0; i < length - 1; i++) { arr[i] = random.nextInt(100); } return arr; } // 快速排序 public static void quickSort(int[] arr, int left, int right) { if (left < right) { int pivotIndex = partition(arr, left, right); quickSort(arr, left, pivotIndex - 1); quickSort(arr, pivotIndex + 1, right); } } // 快速排序的划分函数 public static int partition(int[] arr, int left, int right) { int pivot = arr[left]; int i = left; int j = right; while (i < j) { while (i < j && arr[j] >= pivot) { j--; } arr[i] = arr[j]; while (i < j && arr[i] <= pivot) { i++; } arr[j] = arr[i]; } arr[i] = pivot; return i; } // 折半查找法 public static int binarySearch(int[] arr, int target) { int left = 0; int right = arr.length - 1; while (left <= right) { int mid = (left + right) / 2; if (arr[mid] == target) { return mid; } else if (arr[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; } } ``` 这段代码会生成一个长度为14的随机数组,然后使用快速排序将其排序,最后使用折半查找查找指定数值的位置。你可以根据需要修改代码中的目标数值和数组长度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值