什么是选择排序?
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
稳定性
选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。
代码实现:
package com.common.utils;
import java.util.Arrays;
/**
* @ClassName SelectSort
* @Description: java按照从小到大的顺序排列,选择排序
* @Author: mischen
* @date: 14:57 2022/11/28
* @Version 1.0
*/
public class SelectSort {
public static void main(String[] args) {
int[] selectNums = {25, 63, 78, 45, 132, 7,-1};
System.out.println("排序之前:" + Arrays.toString(selectNums));
selectSort(selectNums);
System.out.println("排序之后:" + Arrays.toString(selectNums));
}
public static void swap(int[]nums,int i,int j){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
public static void selectSort(int[] nums){
for(int i=0;i<nums.length-1;i++){
int temp=i;
for(int j=i+1;j<nums.length;j++){
if(nums[j]<nums[temp])
swap(nums,j,temp);
}
System.out.println("第"+i+"次排序:"+Arrays.toString(nums));
}
}
}