一、简单选择排序原理分析
在需要排序的的有序性集合中取出第一个元素依次与其后的每一个元素比较,如果大于后面的某个数,则两个数交换位置,在第一次排序完成后,第一个元素存放的就是该有序集合的最小值。
取出第二个元素依次与其后的每一个元素比较,如果大于后面的某个数,则两个数交换位置,在第二次排序完成后,第一个元素存放的就是该有序集合的次小值。
取出第三个元素依次与其后的每一个元素比较,如果大于后面的某个数,则两个数交换位置,在第三次排序完成后,第一个元素存放的就是该有序集合的第三小的值。
以此类推…
二、排序过程演示
为了方便演示的直观性,我就选int类型数组{9,5,8,4,7}来演示
第一趟
元素比较 | 谁大 | 是否交换位置 | 当前数组 | 此趟元素比较第几次 |
---|---|---|---|---|
5和9比 | 9大 | 否 | {5,9,8,4,7} | 1 |
5和8比 | 8大 | 否 | {5,9,8,4,7} | 2 |
5和4比 | 5大 | 是 | {4,9,8,5,7} | 3 |
4和7比 | 7大 | 否 | {4,9,8,5,7} | 4 |
第二趟
元素比较 | 谁大 | 是否交换位置 | 当前数组 | 此趟元素比较第几次 |
---|---|---|---|---|
9和8比 | 9大 | 是 | {4,8,9,5,7} | 1 |
8和5比 | 8大 | 是 | {4,5,9,8,7} | 2 |
5和7比 | 5大 | 是 | {4,5,9,8,7} | 3 |
第三趟
元素比较 | 谁大 | 是否交换位置 | 当前数组 | 此趟元素比较第几次 |
---|---|---|---|---|
9和8比 | 9大 | 是 | {4,5,8,9,7} | 1 |
8和7比 | 8大 | 是 | {4,5,7,9,8} | 2 |
第四趟
元素比较 | 谁大 | 是否交换位置 | 当前数组 | 此趟元素比较第几次 |
---|---|---|---|---|
9和8比 | 9大 | 是 | {4,5,7,8,9} | 1 |
三、代码实现
1、排序方式 小———->大
代码如下(示例):
public class Test02 {
public static void main(String[] args) {
int[] array = { 9, 5, 8, 4, 7 };// 创建一个int类型的数组
selectSort(array);// 调用selectSort()方法(由于是在一个类里面调用,所以不用 类名.方法名 )
}
public static void selectSort(int[] array) {
int temp = 0; // 建立临时变量,为后续两个元素之间的交换做准备
for (int i = 0; i < array.length-1; i++) { // 根据元素的个数设定循环的趟数
for (int j = i + 1; j < array.length; j++) { //根据原理设定每趟需要比较的次数
if (array[i] > array[j]) { // 根据比较大小判断是否需要交换
temp = array[i]; // 开始交换
array[i] = array[j];
array[j] = temp; // 交换结束
}
}
}
for (int i : array) { // 为了便捷利用加强遍历输出排好序的数组
System.out.print(i+" ");
}
}
}
代码如下(输出):
4 5 7 8 9
2、排序方式 大———->小
代码如下(示例):
public class Test02 {
public static void main(String[] args) {
int[] array = { 9, 5, 8, 4, 7 };// 创建一个int类型的数组
selectSort(array);// 调用selectSort()方法(由于是在一个类里面调用,所以不用 类名.方法名 )
}
public static void selectSort(int[] array) {
int temp = 0; // 建立临时变量,为后续两个元素之间的交换做准备
for (int i = 0; i < array.length-1; i++) { // 根据元素的个数设定循环的趟数
for (int j = i + 1; j < array.length; j++) { //根据原理设定每趟需要比较的次数
if (array[i] < array[j]) { // 根据比较大小判断是否需要交换
temp = array[i]; // 开始交换
array[i] = array[j];
array[j] = temp; // 交换结束
}
}
}
for (int i : array) { // 为了便捷利用加强遍历输出排好序的数组
System.out.print(i+" ");
}
}
}
代码如下(输出):
9 8 7 5 4
小结
其实改变排序的顺序只需要该判断条件”if (array[i] < array[j])”中的大于小于符号就行。
四、总结
从结合上面的原理和演示分析可以发现其实选择排序是由规律可言的
1、需要比较的趟数和集合(有序的且有下标的)的元素个数是有关系的,规律是:需要比较的趟数=元素个数-1
2、而比较的趟数里,元素需要比较的次数规律是:每一趟都会将最小的元素提到前面,所以每一趟都会减少一个元素需要比较的元素。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/5071.html