文章目录
哈喽,小伙伴们,欢迎来到小张的频道,今天给大家讲解一下简单排序中的选择排序,希望能帮助到小伙伴们。还需要给大家说明的是这是一个系列性文章,如果您想了解更多面试题型,希望大家多多关注小张哦~
1. 选择排序思想
首先是从未排序数组中找到最小(大)元素,放到排序数组的第一个位置,然后在从剩余未排序数组中找到最小元素,放到排序数组的第二个位置,以此类推,直到所有元素均排序完毕。
2. 选择排序实现
2.1 从未排序的数组中,找到最小的元素
//定义未排序的数组
int[] arrs = {8, 6, 1, 7, 2, 5, 4, 12, 9};
//遍历数组找到最⼩的元素的位置
int start = 0;
int minPosition = start;//假设第⼀个元素是最⼩值
for (int i = start; i < arrs.length; i++) {
if (arrs[i] < arrs[minPosition]) {
minPosition = i;
}
}
System.out.println("最⼩值是:"+minValue);
2.2 将最小值和未排序的数组的第一个元素进行交换
//定义未排序的数组
int[] arrs = {8, 6, 1, 7, 2, 5, 4, 12, 9};
//遍历数组找到最⼩的元素的位置
int start = 0;
int minPosition = start;//假设第⼀个元素是最⼩值
for (int i = start; i < arrs.length; i++) {
if (arrs[i] < arrs[minPosition]) {
minPosition = i;
}
}
int temp = arrs[start];
arrs[start] = arrs[minPosition];
arrs[minPosition] = temp;
System.out.println("第一次交换后的结果为~~~");
for (int i = 0; i < arrs.length; i++) {
System.out.print(arrs[i] + " ");
}
// 1 6 8 7 2 5 4 12 9
2.3 将未排序的数组,分别重复执行2.1和2.2的操作,每次数组的起始的位置都递增,直到排序完毕
/**
* Author: zhl
* Date: 2023/1/14 21:40
* Desc: 演示选择排序
*/
package com.datastructure.algorithm.sort.simplesort;
public class SelectionSort {
public static void main(String[] args) {
//定义未排序的数组
int[] arrs = {8, 6, 1, 7, 2, 5, 4, 12, 9};
//遍历数组找到最⼩的元素的位置
int start = 0;
int minPosition = start;//假设第⼀个元素是最⼩值
for (int i = start; i < arrs.length; i++) {
if (arrs[i] < arrs[minPosition]) {
minPosition = i;
}
}
int temp = arrs[start];
arrs[start] = arrs[minPosition];
arrs[minPosition] = temp;
System.out.println("第一次交换后的结果为~~~");
for (int i = 0; i < arrs.length; i++) {
System.out.print(arrs[i] + " ");
}
// 1 6 8 7 2 5 4 12 9
start = 1;
minPosition = start;
for (int i = start; i < arrs.length; i++) {
if (arrs[i] < arrs[minPosition]) {
minPosition = i;
}
}
temp = arrs[start];
arrs[start] = arrs[minPosition];
arrs[minPosition] = temp;
System.out.println();
System.out.println("第二次交换后的结果为~~~");
for (int i = 0; i < arrs.length; i++) {
System.out.print(arrs[i] + " ");
}
// TODO 重复以上代码,每次start的值都递增1
start = 2;
start = 3;
}
}
2.4 使用循环进行start的自增操作
/**
* Author: zhl
* Date: 2023/1/14 21:40
* Desc: 演示选择排序
*/
package com.datastructure.algorithm.sort.simplesort;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SelectionSort {
private final static Logger logger = LoggerFactory.getLogger(SelectionSort.class);
public static void main(String[] args) {
//定义未排序的数组
int[] arrs = {8,6,1,7,2,5,4,12,9};
for (int j = 0; j < arrs.length; j++) {
int minPosition = j;
for (int i = j; i < arrs.length; i++) {
if (arrs[i]<arrs[minPosition]){
minPosition=i;
}
}
int temp = arrs[j];
arrs[j] = arrs[minPosition];
arrs[minPosition] = temp;
}
logger.info("排序后结果为~~~~");
for (int i = 0; i < arrs.length; i++) {
System.out.print(arrs[i]+" ");
}
// 1 2 4 5 6 7 8 9 12
}
}