原理:每一趟从待排序的元素里选出最小的元素,顺序放在已排好序列的最后,直到全部记录排序完毕;

基本思想:给定数组 int[] arrs = {2, 6, 3, 1, 5, 8, 7};第一趟排序,在待排序数据arrs[0]~arrs[6]中选出最小的元素与arrs[0]交换;
第二趟排序,在待排序数据arrs[1]~arrs[6]中选出最小的元素与arrs[1]交换;
以此类推,第i趟在待排序的数据arrs[i]~arr[n]中选出最小的元素与arrs[i]交换,直到全部排序完成。

举例数组 int[] arrs = {2, 6, 3, 1, 5, 8, 7}
----------------------------------------------------------------
第一趟排序: 原始数据:2 6 3 1 5 8 7

最小数据1,把1放在首位,也就是1和2互换位置,

排序结果:1 6 3 2 5 8 7

----------------------------------------------------------------
第二趟排序:

第1以外的数据{6 3 2 5 8 7}进行比较,2最小,2和6交换

排序结果:1 2 3 6 5 8 7
----------------------------------------------------------------
第三趟排序:

除1、2以外的数据{3 6 5 8 7}进行比较,3最小,不用交换

排序结果:1 2 3 6 5 8 7
----------------------------------------------------------------
第四趟排序:

除1、2、3以外的数据{ 6 5 8 7}进行比较,5最小,5和6交换

排序结果:1 2 3 5 6 8 7
----------------------------------------------------------------
第五趟排序:

除1、2、3、5以外的数据{ 6 8 7}进行比较,6最小

排序结果:1 2 3 5 6 8 7
----------------------------------------------------------------
第六趟排序:

除1、2、3、5、6以外的数据{8 7}进行比较,7最小,7和8交换

排序结果:1 2 3 5 6 7 8

        for (int i = 0; i < arrs.length - 1; i++) {//第i趟排序

            int k = i;

            for (int j = k + 1; j < arrs.length; j++) {//选最小的元素

                if (arrs[k] > arrs[j]) {

                    k = j;//目前找到的最小值的位置
                }

            }
			//找到本次循环最小值,进行交换
            if (i != k) {
                int temp = arrs[i];
                arrs[i] = arrs[k];
                arrs[k] = temp;
            }



        }

收藏 打印