选择排序法

关于选择排序法

上一篇:冒泡排序

记录一下关于 Java 数组中的另一个简单的算法:选择排序法

算法原理:

假设有一个整型一维数组 a = { 3,1,6,2,5 },要对该数组中的元素进行从小到大的排序。选择排序算法核心思想

每一次从数组中找出最小值(外层每循环一次,找到数组中最小的元素),拿着最小的元素与当前数组最前面的元素交换位置,每次外层循环结束后去除最小的元素(也就是最左边的元素),重复进行下去...


  • 第一次参与比较的的数据:3 1 6 2 5

第一次循环后的结果:1 3 6 2 5

  • 第二次参与比较的数据:3 6 2 5

第一次循环后的结果:2 6 3 5

  • 第三次参与比较的数据:6 3 5

第一次循环后的结果:3 6 5

  • 第四次参与比较的数据:6 5

第四次循环后的结果:5 6

至此循环结束

冒泡排序 VS 选择排序:

  1. 选择排序比冒泡排序的效率高;

  2. 选择排序比较的次数与冒泡排序比较的次数一样;

  3. 冒泡排序存在很多次的无意义交换元素,选择排序每次交换元素总是有意义的(交换次数变少了)。

实现代码:

/**
 *  by YeRun
 */
public class SelectSort {
    
    public static void main(String[] args) {
        
        int[] a = {3,1,6,2,5};  //   5条数据,外层循环四次
        //  最小的元素下标
        int minIndex;
            
        for(int i = 0; i < a.length-1; i++){
            //  一开始假设最小元素就是数组中的第一个元素
            minIndex = i;

            for (int j = i+1; j < a.length; j++) {
                if (a[j] < a[minIndex]){
                    minIndex = j;
                }
            }
            //  这个判断的目的是减少没必要的交换量,不加也可以
            if (minIndex != i){

                int temp = a[minIndex];
                a[minIndex] = a[i];
                a[i] = temp;
            }
        }

        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
    }
}

结果:

1
2
3
5
6

posted @ 2020-03-21 20:11  Jadyao  阅读(212)  评论(1)    收藏  举报