1.介绍:
选择排序也属于内部排序法,是从欲排序的数据中按指定的规则选择某一个元素,再以规则交换位置后达到的排序目的。
2.工作原理:
第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
3.代码实现:
package sort;
import java.util.Arrays;
/**
* @author WuChenGuang
*/
public class SelectSort {
public static void main(String[] args) {
int[] arr = new int[]{3, 2, 4, 5, 6, 8, 7, 1};
for (int i = 0; i < arr.length; i++) {
for (int j = arr.length - 1; j > i; j--) {
if (arr[j] < arr[i]) {
int temp;
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
System.out.println("选择排序后的结果:" + Arrays.toString(arr));
}
}
运行结果:
4.补充:
package sort;
/**
* @author WuChenGuang
* 冒泡排序法和选择排序法比较的次数相同,但是选择排序法交换的位置次数减少了
*/
public class SelectSorting {
public static void main(String[] args) {
int[] arr = {9, 8, 10, 7, 6, 0, 11};
int count = 0;
int count2 = 0;
for (int i = 0; i < arr.length - 1; i++) {
// 假设i下标位置上的元素是最小的
int min = i;
for (int j = i + 1; j < arr.length; j++) {
count++;
if (arr[j] < arr[min]) {
// 最小值的元素下标是j
min = j;
}
}
if (min != i) {
// 表示存在更小的数据(arr[min]),最前面的数据是arr[i]
// 交换位置
int temp;
temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
count2++;
}
}
for (int j : arr) {
System.out.print(j + " ");
}
System.out.println();
System.out.println("比较的次数是:" + count);
System.out.println("交换的次数是:" + count2);
}
}
运行结果: