选择排序(SelectionSort)
描述
- 首先在未排序的序列中找到最小/最大元素,存放到排序序列的起始位置
- 再从剩余未排序元素中继续寻找最小/最大元素,然后放到已排序序列的末尾
- 重复第二步,直到所有元素均排序完毕
- 是个不稳定的排序算法,不适合大规模数据的排列
案例
当前有一个数组 { 5,6,1,3,8,4,6,9,0,2 } ,用 选择排序* 对其进行 升序 排序
代码
代码思路:
- 寻找序列中最小元素,记录最小的下标位置
- 每一轮寻找结束后,交换一次,将该元素放到数列的一端
import java.util.Arrays;public class SelectionSort {
public static void main(String[] args) {
int[] a = {
5,6,1,3,8,4,6,9,0,2};System.out.println("起始选择排序结果:"+Arrays.toString(a));//循环的轮数 a.length-1for(int i = 0;i < a.length - 1 ; i++){
int minIndex = i;//由于每轮会将最小值放在数列开头,起始值位置为剩余数列起始位置,for(int j = i+1 ; j < a.length ; j++){
//每一轮找到剩余数列的最小值的位置if(a[j]< a[minIndex]){
minIndex = j;}}//一轮结束后交换一次,将当前位置的值换成对应最小值位置的序列值if(i != minIndex){
int temp = a[i];a[i] = a[minIndex];a[minIndex] = temp;}System.out.println("第"+(i+1)+"次循环结果:"+Arrays.toString(a));}System.out.println("最终选择排序结果:"+Arrays.toString(a));}
}
控制台日志输出
起始选择排序结果:[5, 6, 1, 3, 8, 4, 6, 9, 0, 2]
第1次循环结果:[0, 6, 1, 3, 8, 4, 6, 9, 5, 2]
第2次循环结果:[0, 1, 6, 3, 8, 4, 6, 9, 5, 2]
第3次循环结果:[0, 1, 2, 3, 8, 4, 6, 9, 5, 6]
第4次循环结果:[0, 1, 2, 3, 8, 4, 6, 9, 5, 6]
第5次循环结果:[0, 1, 2, 3, 4, 8, 6, 9, 5, 6]
第6次循环结果:[0, 1, 2, 3, 4, 5, 6, 9, 8, 6]
第7次循环结果:[0, 1, 2, 3, 4, 5, 6, 9, 8, 6]
第8次循环结果:[0, 1, 2, 3, 4, 5, 6, 6, 8, 9]
第9次循环结果:[0, 1, 2, 3, 4, 5, 6, 6, 8, 9]
最终选择排序结果:[0, 1, 2, 3, 4, 5, 6, 6, 8, 9]