java选择排序简书_[图解] 选择排序

1. 图示过程

5223afa8796c

说明:此图示为未优化的选择排序示意图,意在说明原理

2. 动图展示

5223afa8796c

说明:此动图为优化后的选择排序,每趟只交换一次

3. 文字叙述过程

第1趟比较:拿第1个元素依次和它后面的每个元素进行比较,如果第1个元素大于后面某个元素,交换它们,经过第1趟比较,数组中最小的元素被选出,它被排在第一位

第2趟比较:拿第2个元素依次和它后面的每个元素进行比较,如果第2个元素大于后面某个元素,交换它们,经过第2趟比较,数组中第2小的元素被选出,它被排在第二位

......

第n-1趟比较:第n-1个元素和第n个元素作比较,如果第n-1个元素大于第n个元素,交换它们

4. Java代码实现

public static void selectionSort(int[] nums) {

if (nums == null || nums.length < 2) {

return;

}

for(int i = 0; i < nums.length - 1; i++) {

for(int j = i + 1; j < nums.length; j++) {

if(nums[i] > nums[j]) {

swap(nums, i, j);

}

}

}

}

public static void swap(int[] arr, int i, int j) {

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

5. 复杂度

时间复杂度:O(n²)

空间复杂度:O(1),只需要一个附加程序单元用于交换

稳定性:选择排序是不稳定的排序算法,因为无法保证值相等的元素的相对位置不变,例如 [3, 4, 3, 1, 5]这个数组,第一次交换,第一个3和1交换位置,此时原来两个3的相对位置发生了变化。

6. 优化

上面的算法的缺点:在每趟比较过程中,一旦发现某个元素比第1位的元素小,就交换它们,但这是没必要的,徒增了交换的次数。

优化:选择排序的核心是,在每趟比较中,找到本趟中最小的元素放在本趟比较的第1个位置,所以选择排序的每趟比较只需要交换一次即可,只要找到本趟比较中最小的元素和本趟比较中第1位置的元素交换即可。

public static void selectionSort(int[] nums) {

if (nums == null || nums.length < 2) {

return;

}

for(int i = 0; i < nums.length - 1; i++) {

int minIndex = i;

for(int j = i + 1; j < nums.length; j++) {

if(nums[i] > nums[j]) {

minIndex = nums[j] < nums[minIndex] ? j : minIndex;

}

}

swap(nums, i, minIndex);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java提供了生成随机数的工具类Random,我们可以利用它来生成三位和四位的纯数字。以下是一个简单的示例代码: ```java import java.util.Random; public class RandomNumberGenerator { public static void main(String[] args) { Random random = new Random(); // 生成三位纯数字 int threeDigitNumber = random.nextInt(900) + 100; System.out.println("生成的三位纯数字为:" + threeDigitNumber); // 生成四位纯数字 int fourDigitNumber = random.nextInt(9000) + 1000; System.out.println("生成的四位纯数字为:" + fourDigitNumber); } } ``` 以上代码中,我们首先创建了一个Random对象,然后利用nextInt()方法生成一个范围在100-999之间的随机整数,即三位纯数字。同理,生成四位纯数字时范围为1000-9999。最后将生成的数字输出。 运行上述代码,我们可以得到类似以下的输出结果: ``` 生成的三位纯数字为:573 生成的四位纯数字为:3259 ``` 以上就是使用Java生成三位和四位纯数字的简单示例。希望能对你有所帮助! ### 回答2: 在Java中生成三位或四位纯数字的方法有很多种,下面分别介绍两种常见的方法。 1. 使用Math.random()方法生成三位或四位纯数字: ```java int num; if (Math.random() < 0.1) { num = (int) (Math.random() * 9000) + 1000; // 生成四位纯数字 } else { num = (int) (Math.random() * 900) + 100; // 生成三位纯数字 } System.out.println(num); ``` 这里通过Math.random()方法生成0到1之间的随机数,如果小于0.1则生成四位纯数字,否则生成三位纯数字。通过随机数生成的数字范围为100到999(三位纯数字)或1000到9999(四位纯数字)。 2. 使用Random类生成三位或四位纯数字: ```java Random random = new Random(); int num; if (random.nextBoolean()) { num = random.nextInt(9000) + 1000; // 生成四位纯数字 } else { num = random.nextInt(900) + 100; // 生成三位纯数字 } System.out.println(num); ``` 通过Random类的nextInt()方法生成指定范围内的随机整数,生成的数字范围为100到999(三位纯数字)或1000到9999(四位纯数字)。 以上两种方法都使用了随机数生成的原理,通过控制生成数字的范围实现生成三位或四位纯数字。 ### 回答3: 在Java中,我们可以使用Random类来生成随机数。对于三位和四位的纯数字,我们可以使用Random类的nextInt()方法和一些数学运算来实现。 首先,我们需要导入java.util.Random类: ```java import java.util.Random; ``` 接下来,我们可以创建Random对象,并生成一个三位的纯数字: ```java Random random = new Random(); int randomNum = random.nextInt(900) + 100; ``` 上述代码中,random.nextInt(900)会产生0到899之间的随机整数,再加上100就可以得到一个100到999之间的随机整数,即一个三位纯数字。 类似地,我们可以生成一个四位的纯数字: ```java Random random = new Random(); int randomNum = random.nextInt(9000) + 1000; ``` 同样地,random.nextInt(9000)会产生0到8999之间的随机整数,再加上1000就可以得到一个1000到9999之间的随机整数,即一个四位纯数字。 最后,我们可以使用System.out.println()方法将生成的随机数打印输出: ```java System.out.println("随机生成的三位纯数字:" + randomNum); ``` ```java System.out.println("随机生成的四位纯数字:" + randomNum); ``` 以上就是用Java随机生成三位和四位纯数字的方法。使用Random类的nextInt()方法和数学运算可以实现生成指定范围内的随机数,并通过System.out.println()方法将其输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值