有序数组:----随机产生[0-40)的一个整数,看它是否在这个数组中

该代码示例展示了一个Java程序,使用二分搜索法在一个有序数组中查找特定目标值。程序初始化了一个包含特定整数的数组,并定义了目标值,然后通过迭代调整搜索范围,最终确定目标值是否存在。
public class test003 {
    public static void main(String[] args) {
        //有序数组;----随机产生[0-40)的一个整数,看它是否在这个数组中
        int[] nums={1,5,9,15,23,36};//初始化一个数组
        int target=9;//假设这个值是10。target的意思是目标
        boolean flag=false;//定义一个布尔变量,初始化为false
        int left=0;//数组左边界下标
        int right=nums.length-1;//数组右边界下标
        while(left<=right){
            int mid=left+(right-left)/2;//这个是数组中间数的下标
            if(target==nums[mid]){//如果要查找的数等于数组中间的数则为真,跳出
                flag=true;
                break;
            }else if(target==nums[left]){//如果要查找的数等于数组左边的数
                flag=true;
                break;
            }else if(target==nums[right]){//如果要查找的数等于数组右边的数
                break;
            }else if(target<nums[mid]){
                right=mid-1;
                left++;//去left+1,mid-1范围内继续下一次查找
            }else{
                left=mid+1;
                right--;//去mid+1,right-1范围内继续下一次查找
            }

        }if(flag){
            System.out.println("存在");
        }else{
            System.out.println("不存在");
        }
    }
}

<think> 根据用户需求,我们需要完成以下任务: 1. 生成7个范围在0-36(包含0和36)的随机整数。 2. 将这些随机数放入一个数组中。 3. 使用选择排序算法数组进行排序。 4. 输出排序后的数组。 参考引用中的代码,我们可以: - 使用`java.util.Random`来生成随机数。 - 创建一个长度为7的整型数组- 通过循环生成7个随机数并赋数组- 使用选择排序算法数组进行排序。 - 输出排序前和排序后的数组(根据用户需求,只要求输出排序后的,但通常我们会输出排序前和排序后以验证)。 选择排序的基本思想: 每次从未排序的部分选择最小(或最大)的元素,放到已排序部分的末尾。具体步骤: 1. 遍历数组,从第一个元素开始,假设当前元素是最小的。 2. 在剩余未排序的元素中,找到最小的元素。 3. 将找到的最小元素与当前元素交换。 4. 重复上述过程,直到整个数组有序。 参考引用[4]中的C++代码,我们可以将其转换为Java代码。 代码结构: 1. 导入`java.util.Random`。 2. 在`main`方法中: a. 创建`Random`实例。 b. 声明一个长度为7的整型数组。 c. 循环7次,每次生成一个0-36的随机数并放入数组。 d. 输出未排序的数组(可选,根据用户需求,但通常我们会展示排序前和排序后)。 e. 实现选择排序算法。 f. 输出排序后的数组。 注意:随机数范围是0-36,所以我们可以使用`nextInt(37)`,因为`nextInt(n)`会生成0到n-1的随机数,所以37表示0-36。 根据用户要求,我们只需要输出排序后的数组,但为了清晰,我们可以输出排序前后的数组。 编写代码: </think> 以下是使用Java语言实现选择排序算法对7个0-36随机数组排序的完整代码: ```java import java.util.Random; public class SelectionSortRandomArray { public static void main(String[] args) { Random random = new Random(); int[] arr = new int[7]; // 创建长度为7的数组 // 生成7个0-36的随机数 System.out.print("排序前数组: "); for (int i = 0; i < arr.length; i++) { arr[i] = random.nextInt(37); // 37表示0-36(包含边界) System.out.print(arr[i] + " "); } System.out.println(); // 选择排序算法 for (int i = 0; i < arr.length - 1; i++) { int minIndex = i; // 记录当前最小位置 // 在未排序部分查找最小 for (int j = i + 1; j < arr.length; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; // 更新最小位置 } } // 将最小交换到已排序序列末尾 if (minIndex != i) { int temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } } // 输出排序结果 System.out.print("排序后数组: "); for (int num : arr) { System.out.print(num + " "); } } } ``` ### 代码说明: 1. **随机数生成**: `random.nextInt(37)` 生成0-36(含边界)的整数[^2] 2. **选择排序流程**: - 外层循环控制已排序序列位置 - 内层循环查找未排序部分的最小 - 最小交换到当前位置[^3] 3. **时间复杂度**: $O(n^2)$,其中 $n$ 为数组长度 4. **空间复杂度**: $O(1)$ (原地排序) ### 运行示例: ``` 排序前数组: 15 8 36 2 22 0 17 排序后数组: 0 2 8 15 17 22 36 ``` ### 关键点解析: 1. `nextInt(37)` 确保范围 $[0, 36]$ 的均匀分布 2. 选择排序通过减少交换次数(相比冒泡排序)提高效率[^4] 3. 内层循环从 `i+1` 开始,避免冗余比较
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值