1、概述
选择排序思想:对一组长度为 n 的未排序的数据进行遍历,比较得出最小值和对应的下标,然后将最小值和下标为0的值进行交换,即将最小值放到最前面;然后再从下标为1的位置进行第二轮遍历,比较得出剩余数据中的最小值,并与下标为1的值进行交换;按照这种方式依次遍历,直到完成所有数据的排序。
2、图解示例

观察可得:
- 定义两个临时变量min和index,分别表示最小值和最小值的下标。并且每轮排序开始时,都将min和index的值重置为当前剩余未排序的起始值,然后依次向后遍历比较。
- 对数组排序需要进行 length - 1 轮遍历。
- 每轮遍历中的数据比较都在依次减少。
3、代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| package com.ld.algorithm.sort;
import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
int[] array = {23,1,90,-3,18};
System.out.println("排序前:" + Arrays.toString(array));
int[] sortArray = sort(array);
System.out.println("排序后:" + Arrays.toString(sortArray)); }
public static int[] sort(int[] array){
int minIndex = 0; int min = 0; for(int i = 0;i < array.length - 1;i++){ minIndex = i; min = array[i]; for(int j = i + 1; j < array.length;j++){ if(array[j] < min){ min = array[j]; minIndex = j; } } if(minIndex != i){ array[minIndex] = array[i]; array[i] = min; } } return array; } }
|