排序算法-选择排序

选择排序

基本介绍

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

选择排序思想:

选择排序(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]

代码实现

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
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 @   xugeA  阅读(136)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示