排序算法——选择排序

排序算法——选择排序

大纲目录
排序算法简介

一、基本介绍

    选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的

二、选择排序思想

    选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从arr[0]-arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[1]-arr[n-1]中选取最小值,与arr[1]交换,第三次从arr[2]-arr[n-1]中选取最小值,与arr[2]交换,…,第i次从arr[i-1]-arr[n-1]中选取最小值,与arr[i-1]交换,…, 第n-1次从arr[n-2]~arr[n-1]中选取最小值,与arr[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。

三、选择排序图解

在这里插入图片描述

四、选择排序优化思路

    在一趟遍历中,同时找出最大值与最小值,放到数组两端,这样就能将遍历的趟数减少一半。第一次选择最大值与最小值.

五、源码

/**
 * @author(作者):Liubaoteng
 * @date(创建日期):2022/7/27 11:53
 * 选择排序
 * *****************************************************************************
 */
public class SelectSort {
    public static void main(String[] args) {
//        int arr[]  = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
//        selectSort2(arr);
//        System.out.println(Arrays.toString(arr));

        int[] arr = new int[80000];
        for(int i =0; i < 80000;i++) {
            arr[i] = (int)(Math.random() * 8000000); //生成一个[0, 8000000) 数
        }
        System.out.println("80000条数据排序开始:");
        long start1 = System.currentTimeMillis();
//        selectSort1(arr);//7693
        selectSort2(arr);//1432
        long end1 = System.currentTimeMillis();
        System.out.println("80000条数据排序结束:");
        System.out.println("80000条数据排序耗时:"+(end1-start1));
    }


    //选择排序-简单版
    public static void selectSort1(int[] arr){
        int temp = 0;
        for(int i = 0;i<=arr.length-1;i++){
            for(int j = i+1;j<=arr.length-1;j++){
                if(arr[i]>arr[j]){
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }

    /**
     *选择排序优化版
     * 在一趟遍历中,同时找出最大值与最小值,放到数组两端,
     * 这样就能将遍历的趟数减少一半。第一次选择最大值与最小值
     **/
    public static void selectSort2(int[] arr){
        int temp = 0;
        int right = arr.length-1;
        for(int i = 0;i<=right;i++){
            for(int j = i+1;j<=right;j++){
                if(arr[i]>arr[j]){
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
                if(arr[right] < arr[j]){
                    temp = arr[right];
                    arr[right] = arr[j];
                    arr[j] = temp;
                    right--;
                }
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值