算法与数据结构--选择排序

目录

1、选择排序的原理

2、过程分析

3、参考代码


1、选择排序的原理

  • 每次循环将数组中每个元素与第一个元素比较,如果这个元素小于第一个元素,则交换这两个元素
  • 循环第一条规则,找出最小值,放到第一位
  • 进行n-1轮比较,完成排序

    简单而言,每轮都找到最小的放到前面。举例:{8 , 2 , 3 , 7 , 1}的排序过程如下所示:

          数组:   array={8 , 2 , 3 , 7 , 1}

          第1轮: array={1 | 8 , 3 , 7 , 2}

          第2轮: array={1 , 2 | 8 , 7 , 3}

          第3轮: array={1 , 2 , 3 | 8 , 7}

          第4轮: array={1 , 2 , 3 , 7 | 8}

2、过程分析

  • i 代表第一个数据的位置
  • j 代表后边每一个元素的位置
array i j array[i] array[j] array[i]>array[j] [i]交换[j]
1
{8|2,3,7,1} [0] [1] 8 2 TRUE 8<->2
{2|8,3,7,1} [0] [2] 2 3 FALSE --
{2|8,3,7,1} [0] [3] 2 7 FALSE --
{2|8,3,7,1} [0] [4] 2 1 TRUE 2<->1
{1,8|3,7,2}
2
{1,8|3,7,2} [1] [2] 8 3 TRUE 8<->3
{1,3|8,7,2} [1] [3] 3 7 FALSE --
{1,3|8,7,2} [1] [4] 3 2 TRUE 3<->2
{1,2,8|7,3}
3
{1,2,8|7,3} [2] [3] 8 7 TRUE 8<->7
{1,2,7|8,3} [2] [4] 7 3 TRUE 7<->3
{1,2,3,8|7}
4
{1,2,3,8|7} [3] [4] 8 7 TRUE 8<->7
{1,2,3,7|8}
结果
{1,2,3,7,8}
  • i 的取值范围是: 0 ~ < array.length - 1
  • j 的取值范围是: i + 1 ~ < array.length
  • 交换步骤如下:
        if (array[i] > array[j]) {
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }

3、参考代码

    public static void main(String[] args) {
        int[] array = {8 , 2 , 3 , 7 , 1};
        System.out.println(Arrays.toString(selectedSort(array)));
    }

    private static int[] selectedSort(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = i + 1; j < array.length; j++) {
                if (array[i] > array[j]) {
                    int tmp = array[i];
                    array[i] = array[j];
                    array[j] = tmp;
                }
            }
        }
        return array;
    }
    -----------输出结果-------------
    [1, 2, 3, 7, 8]

 

你可能感兴趣的:(算法)