选择排序介绍:
选择排序(Selection sort)是一种简单直观的排序算法
选择排序的原理:
第一次从待排序的数据中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
注:选择排序是不稳定的排序方法。
选择排序动图演示:
选择排序算法思路:
1、选择排序一共有数组大小-1轮排序
2、每一轮排序又是一个循环
- 先假设当前这个数是最小数
- 然后和后面的每个数进行比较,如果发现有比当前这个数还小的数就重新确定最小数并得到下标
- 当遍历到数组的最后时,就得到本轮最小的数和下标
- 交换代码
代码演示:
分步演示思路讲解代码:
public class selectsortoptimization {
public static void main(String[] args) {
int array[] = { 34, 19,11, 109,3,56 };
select(array);
}
public static void select(int arr[]) {
// 第一轮排序
int min = arr[0];// 假设最小值是第一个元素
int minIndex = 0;// 假设最小值的下标是第一个
for (int i = 0 + 1; i < arr.length; i++) { // 开始与第二个数进行比较
if (min > arr[i]) {
min = arr[i];
minIndex = i;
}
}
if (minIndex != 0) {
arr[minIndex] = arr[0];// 将arr[0]换到最小值原来所在的位置
arr[0] = min;// 将最小值换到arr[0]的位置
}
System.out.println("第一轮交换后");
System.out.println(Arrays.toString(arr));
// 第二轮
int min1 = arr[1];// 假设最小值是第二个元素
int minIndex1 = 1;// 假设最小值的下标是第二个
for (int i = 1 + 1; i < arr.length; i++) { // 开始与第三个数进行比较
if (min1 > arr[i]) {
min1 = arr[i];
minIndex1 = i;
}
}
if (minIndex1 != 1) {
arr[minIndex1] = arr[1];// 将arr[1]换到最小值原来所在的位置
arr[1] = min1;// 将最小值换到arr[1]的位置
}
System.out.println("第二轮交换后");
System.out.println(Arrays.toString(arr));
// 第三轮
int min2 = arr[2];// 假设最小值是第三个元素
int minIndex2 = 2;// 假设最小值的下标是第三个
for (int i = 2 + 1; i < arr.length; i++) { // 开始与第四个数进行比较
if (min2 > arr[i]) {
min2 = arr[i];
minIndex2 = i;
}
}
if (minIndex2 != 2) {
arr[minIndex2] = arr[2];// 将arr[2]换到最小值原来所在的位置
arr[2] = min2;// 将最小值换到arr[2]的位置
}
System.out.println("第三轮交换后");
System.out.println(Arrays.toString(arr));
}
}
综合后的代码:
public class selectsortoptimization {
public static void main(String[] args) {
int array[] = { 34, 19,11, 109,3,56 };
select(array);
}
public static void select(int arr[]) {
//综合
for(int i=0;i<arr.length-1;i++) {
int min = arr[i];// 假设最小值是第一个元素
int minIndex =i;// 假设最小值的下标是第一个
for (int j = i + 1;j < arr.length; j++) { // 开始与第二个数进行比较
if (min > arr[j]) {
min = arr[j];
minIndex = j;
}
}
if (minIndex != 0) {
arr[minIndex] = arr[i];// 将arr[0]换到最小值原来所在的位置
arr[i] = min;// 将最小值换到arr[0]的位置
}
System.out.println("第"+(i+1)+"轮交换后");
System.out.println(Arrays.toString(arr));
}
}
}