[Java]排序算法>选择排序>【简单选择排序】(O(n*n)/不稳定/)

1 选择排序

1.1 算法思想

每一趟从待排序的记录中选出关键字最小的记录,按顺序放在已排序的记录序列的最后(or最前面),直到全部排完位置。

1.2 算法特征

  • 属于【选择排序】
  • 适用于【稳定性】:不稳定(亦可稳定,与“交换记录”的策略相关)
  • 适用于【存储结构】:顺序存储结构 or 链式存储结构 (二者均可)
  • 【时间复杂度】:O(n*n) (最好/平均/最坏)
  • 【空间复杂度】:O(1) (最好/平均/最坏)
  • (补充:)移动次数较少
  • 相关口诀:(选)希堆快不稳定,选(基)归堆时衡定

1.3 算法实现

import java.util.Arrays;
public class SelectSort {
    /**
     * 选择排序
     * @param array
     * @return
     */
    public static int [] selectSort(int[] array){
        int left = 0, right = array.length-1;
        int [] resultArray = Arrays.copyOfRange(array, 0, array.length);

        for(int i=left;i<right;i++){
            int minIdx = i;
            for(int j=i+1;j<=right;j++){//每趟选择出最小值元素的下标
                if(resultArray[minIdx]>resultArray[j]){//存在更小的元素时
                    minIdx = j;
                }
            }
            int tmp = resultArray[minIdx];
            resultArray[minIdx] = resultArray[i];
            resultArray[i] = tmp;
        }
        return resultArray;
    }
}

1.4 算法测试

import java.util.Scanner;

public class Main {
    public static void print(int[] array){
        if(array==null || array.length<1){
            return;
        }
        for(int i=0;i<array.length-1;i++){
            System.out.print(array[i]+" ");
        }
        System.out.println(array[array.length-1]);
    }

    public static void main(String[] args) {
        //1 输入 一组 乱序的数值 数组
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        String [] strValues = input.trim().split(" ");
        int [] array = new int[strValues.length];
        for(int i=0,len=strValues.length;i<len;i++){
            array[i] = Integer.valueOf(strValues[i]).intValue();//假定所有输入均为合规的整型数值
        }
//        print(array);// test - 输出 所输入的数据

        //2 排序
        int [] sortedArray = SelectSort.selectSort(array);
        //3 输出
        print(sortedArray);
    }
}

1.5 参考文献

  • 《数据结构(C语言-第2版-严蔚敏 吴伟民 著)》:Page246
posted @ 2020-03-07 18:01  千千寰宇  阅读(353)  评论(0编辑  收藏  举报