选择排序

基本介绍

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

选择排序思想

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

思路分析图: 

说明:
  1. 选择排序一共有(数组大小 - 1 )轮排序
  2. 每1轮排序,又是一个循环, 循环的规则(代码)
    2.1先假定当前这个数是最小数
    2.2 然后和后面的每个数进行比较,如果发现有比当前数更小的数,就重新确定最小数,并得到下标
    2.3 当遍历到数组的最后时,就得到本轮最小数和下标
    2.4 交换

代码实现

1. public class selectsort {  
2.     public static void main(String[] args) {  
3.         int[] arr = {3, 9, -1, 10, -2};  
4.         System.out.println("原数组为:" + Arrays.toString(arr));  
5.         selectSort(arr);  
6.         System.out.println("排序后数组为:" + Arrays.toString(arr));  
7.     }  
8.   
9.     //选择排序时间复杂度是 O(n^2)  
10.     private static void selectSort(int[] arr) {  
11.         int minIndex;//用于存放最小值(暂定的)的下标  
12.         int min;//用于存放最小值(暂定的)的数值  
13.         for (int i = 0; i < arr.length - 1; i++) {  
14.            //假定每一趟的第一个数组元素即为最小值
15.             minIndex = i;  
16.             min = arr[i];  
17.             for (int j = i + 1; j < arr.length; j++) {  
18.                 if (min > arr[j]) {// 说明假定的最小值,并不是最小  
19.                     min = arr[j];// 重置 min  
20.                     minIndex = j;// 重置 minIndex  
21.                 }  
22.             }  
23.             //将最小值,放在 arr[i], 即交换  
24.             arr[minIndex] = arr[i];  
25.             arr[i] = min;  
26.         }  
27.     }  
28. }  

 

posted @ 2020-11-02 14:50  白刃天使  阅读(125)  评论(0)    收藏  举报