6-2选择排序

选择排序


基本思想

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

图解

1621066571240

代码实现

package sort;

/**
 * @Function :
 * date 2021/5/15 - 16:17
 * How :
 */
public class SelectSort {
    public static void main(String[] args) {
        int [] a ={7,5,6,4,2,3,8,1,9,5,7,5,6};;


        int minIndex =0;

        for (int i = 0; i < a.length; i++) {
            print(a);

            int min = a[i];

            for (int j=i+1;j<a.length;j++){
                if ( a[j]<min ){
                    min = a[j];
                    minIndex = j;
                }
            }

            a[minIndex] = a[i];
            a[i]=min;
        }


    }

    public static void print(int [] a){
        for ( int temp : a ) {
            System.out.printf("\t"+temp);
        }
        System.out.println();
    }
}

选择排序和冒泡排序的区别

区别主要在交换的方式上

每一轮都把最大或最小的元素筛选出来放在相应的位置上
这是相同的

但是,对于每一轮,比如第一轮,要把1~n 中最大的那个放到n这个位置
冒泡法每次比较和移动相邻的两项
而选择排序每次交换当前项和第n项

总的来说,两种排序比较的次数是相同的,但交换的次数,选择排序是更少的,虽然两者的时间复杂度都是 O(n^2)
但通常,选择排序更快一点,选择排序是不稳定排序

posted @ 2021-11-23 21:10  剪水行舟  阅读(86)  评论(0)    收藏  举报