排序算法-选择排序

选择排序

基本介绍

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

选择排序思想:

选择排序(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 次,得到一个按排序码从小到大排列的有序序列。

选择排序思路分析图:

    • 对一个数组的选择排序再进行讲解

 

选择排序应用实例:

有一群牛 , 颜值分别是 101, 34, 119, 1 请使用选择排序从低到高进行排序 [101, 34, 119, 1]

代码实现

package com.xuge.sort;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

/**
 * author: yjx
 * Date :2022/5/3014:01
 **/
public class SelectSort {
  public static void main(String[] args) {
//    int arr[]={101,34,119,1};
//    System.out.println("==========排序前=========");
//    System.out.println(Arrays.toString(arr));
//    selectSort(arr);
//
//    System.out.println("=========排序后=========");
//    System.out.println(Arrays.toString(arr));



    int arr2[]=new int [80000];
    for (int i = 0; i < 80000; i++) {
      arr2[i]=(int)(Math.random()*80000000);//生成随机数[0,80000000);
    }
    System.out.println("====输出数组=====");
    Date data = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String str=sdf.format(data);
    System.out.println("排序前的时间是:"+str);//54
    selectSort(arr2);
    Date data2 = new Date();
    String str2=sdf.format(data2);
    System.out.println("排序后的时间是"+str2);//59

  }
  public static void selectSort(int []arr){
     //逐步推导
     //101,34,119,1
     //1,34,119,101
   //时间复杂度o(n2)
//    System.out.println(Arrays.toString(arr));
    for (int i = 0; i < arr.length - 1; i++) {
      //1.假定最小值
      int min=arr[i];
      int minIndex=i;
      //开始比较
      //2.第一轮最小值一级最小值索引找到
      for(int j=i+1;j<arr.length;j++){
        if(min>arr[j]){//min不是最小值
          //重置最小值
          min=arr[j];
          //重置index
          minIndex=j;
        }
      }
      //3.将最小值与arr[i]交换
      if(minIndex!=i){
        arr[minIndex]=arr[i];
        arr[i]=min;
      }


    }

    /*
    System.out.println();
    int minIndex=0;
    //1.假定最小值
    int min=arr[0];
    //开始比较
    //2.第一轮最小值一级最小值索引找到
    for(int i=0+1;i<arr.length;i++){
      if(min>arr[i]){//min不是最小值
        //重置最小值
        min=arr[i];
        //重置index
        minIndex=i;
      }
    }
    //3.将最小值与arr[0]交换
    if(minIndex!=0){
      arr[minIndex]=arr[0];
      arr[0]=min;
    }

    System.out.println("=========第一轮后=========");
    System.out.println(Arrays.toString(arr));



    minIndex=1;
    //1.假定最小值
    min=arr[1];
    //开始比较
    //2.第一轮最小值一级最小值索引找到
    for(int i=0+2;i<arr.length;i++){
      if(min>arr[i]){//min不是最小值
        //重置最小值
        min=arr[i];
        //重置index
        minIndex=i;
      }
    }
    //3.将最小值与arr[0]交换
    if(minIndex!=1){
      arr[minIndex]=arr[1];
      arr[1]=min;
    }
    System.out.println("=========第二轮后=========");
    System.out.println(Arrays.toString(arr));



    minIndex=2;
    //1.假定最小值
    min=arr[2];
    //开始比较
    //2.第一轮最小值一级最小值索引找到
    for(int i=0+3;i<arr.length;i++){
      if(min>arr[i]){//min不是最小值
        //重置最小值
        min=arr[i];
        //重置index
        minIndex=i;
      }
    }
    //3.将最小值与arr[0]交换
    if(minIndex!=2){
      arr[minIndex]=arr[2];
      arr[2]=min;
    }
    System.out.println("=========第三轮后=========");
    System.out.println(Arrays.toString(arr));
    */

  }
}

  

posted @ 2022-05-30 14:30  xugeA  阅读(159)  评论(0)    收藏  举报