选择排序
原理:从0索引开始,依次和后面的元素比较,小的往前放,第一次完毕,最小值出现在最前面
先画一张,解释一下原理:

第一次选择排序:拿原数组来比较,从索引为0元素开始,即先比较20跟60,20较小,所以位置不变,再比较20跟80,位置不变,再比较20跟50,位置不变,再比较20跟10,10比20小,所以交换位置;这样,第一次排序就结束了
第二次选择排序:拿第一次排序后的数组比较,从索引为1元素开始,即先比较60跟80,位置不变,再比较60跟50,50较小,交换位置,再比较50跟20,20较小,交换位置;这样,第二次排序就结束了
第三次选择排序:拿第二次排序后的数组比较,从索引为2元素开始,即先比较80跟60,60较小,交换位置,再比较60跟50,排在后面的50较小,交换位置;这样,第三次排序就结束了、
第四次选择排序:拿第三次排序后的数组比较,从索引为3元素开始,即比较最后两个元素80跟60,60较小,交换位置;这样,得到的数组就排好序了
总结分析:如果一个数组arr.length=5;也就是5个元素,那么它需要经过(arr.length-1)次,也就是4次排序;每一次排序时需要比较(arr.length-1)次,也就是4次,每二次排序时需要比较(arr.length-1-1)次,也就是3次,每三次排序时需要比较(arr.length-1-1-1)次,也就是2次,每四次排序时需要比较(arr.length-1-1-1-1)次,也就是1次,最后一次比较完后,数组的顺序就排好了
代码实现:
package org.westos.demo2;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] arr = {20, 60, 80, 50, 10};
//第一次排序
int index=0;
for (int i = 1+index; i < arr.length; i++) {
//从索引0的元素开始,依次比较该元素跟后面所有元素,小的往前放
if(arr[index]>arr[i]){
int temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
}
}
System.out.println(Arrays.toString(arr));
//第二次冒泡排序
int index2=1;
for (int i = 1+index2; i < arr.length; i++) {
//从索引1的元素开始,依次比较该元素跟后面所有元素,小的往前放
if(arr[index2]>arr[i]){
int temp = arr[i];
arr[i] = arr[index2];
arr[index2] = temp;
}
}
System.out.println(Arrays.toString(arr));
//第三次冒泡排序
int index3=2;
for (int i = 1+index3; i < arr.length; i++) {
//从索引2的元素开始,依次比较该元素跟后面所有元素,小的往前放
if(arr[index3]>arr[i]){
int temp = arr[i];
arr[i] = arr[index3];
arr[index3] = temp;
}
}
System.out.println(Arrays.toString(arr));
//第四次冒泡排序
int index4=3;
for (int i = 1+index4; i < arr.length; i++) {
//从索引3的元素开始,依次比较该元素跟后面所有元素,小的往前放
if(arr[index4]>arr[i]){
int temp = arr[i];
arr[i] = arr[index4];
arr[index4] = temp;
}
}
System.out.println(Arrays.toString(arr));
}
}
看看每一次排序后的结果:

刚开始写代码,可以分步实现,即把每一次排序的代码写好,能得到最终排好序的数组,然后在此基础上,在尽可能的简化代码;由分布代码可以看出,除了开始的索引值不同以外,其他的代码都是一样的,而且索引值呈现递增趋势;这样,就可以在循环外再套一个循环,起到索引值递增的作用,达到简化代码的效果
简单代码:
package org.westos.demo2;
import java.util.Arrays;
class Demo {
public static void main(String[] args) {
int[] arr = {20, 60, 80, 50, 10};
for (int index = 0; index < arr.length; index++) {
for (int i = 1+index; i < arr.length; i++) {
//从索引i的元素开始,依次比较该元素跟后面所有元素,小的往前放
if(arr[index]>arr[i]){
int temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
看看结果:

可以看出,输出的数组是从小到大排序的;
这篇博客详细介绍了选择排序的原理和实现过程。通过逐步解析选择排序的过程,展示了如何将数组从小到大排序。文章通过示例解释了选择排序的四次迭代,并提供了简单的Java代码实现,演示了如何利用循环优化代码,实现数组的自动排序。
&spm=1001.2101.3001.5002&articleId=102596401&d=1&t=3&u=59c8c9f07dda46c582c61e77b3e43cb7)
2万+

被折叠的 条评论
为什么被折叠?



