LEIZHANG ' s GitHub

排序算法-选择排序

排序算法-选择排序

基本介绍

选择排序(select sorting)也属于内部排序,是从要排序的数据中,按指定的规则选出来某一元素,再按规定交换位置后达到排序的目的

排序思想

  • 第一次从arr[0] ~ arr[n - 1]中选取最小值,与arr[0] 交换

  • 第二次从arr[1] ~ arr[n - 1]中选取最小值,与arr[1] 交换

  • 第i次...

  • 第n - 1次从arr[n - 2] ~ arr[n - 1]中选取最小值,与arr[n - 2] 交换

  • 总共通过 n - 1 次,得到一个从小到大的有序序列

代码实现

  • 10 34 19 100 80 进行排序
package cn.imut.sort;

import java.util.Arrays;

//选择排序
public class SelectSort {
    public static void main(String[] args) {
        int[] arr = {101, 34, 119, 1, -1, 90, 123};
        System.out.println("排序前");
        System.out.println(Arrays.toString(arr));
        selectSort(arr);

        System.out.println("排序后");
        System.out.println(Arrays.toString(arr));
    }

    public static void selectSort(int[] arr) {

        for(int i = 0; i < arr.length - 1; i++) {
            int minIndex = i;       //最小值的索引,假定为0
            int min = arr[i];       //假定第一个数就是最小值

            for(int j = i + 1; j < arr.length; j++) {
                if(min > arr[j]) {      //说明假定的最小值并不是最小的
                    min = arr[j];       //重置最小值
                    minIndex = j;       //重置最小值下标
                }
            }

            //将最小值,放在arr[0],进行交换
            if(minIndex != i) {         //i与假设最小值下标是重合的,只有交换才有区别
                arr[minIndex] = arr[i];
                arr[i] = min;
            }
        }
    }
}

对选择排序进行速度测试

public static void main(String[] args) {
    int[] arr = new int[80000];
    for(int i = 0; i < 80000; i++) {
        arr[i] = (int)(Math.random() * 8000000);        //生成一个[0, 8000000)的数
    }
    Date date1 = new Date();
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String date1Str = simpleDateFormat.format(date1);
    System.out.println("排序前的时间是 :" + date1Str);

    selectSort(arr);

    Date date2 = new Date();
    String date2Str = simpleDateFormat.format(date2);
    System.out.println("排序后的时间是 :" + date2Str);
}
结论:选择排序八万个数字排序只需3秒
posted @ 2020-04-24 18:18  LEI_Z  阅读(148)  评论(0)    收藏  举报