排序算法--------选择排序

1.思想

选择排序的基本思想就是从待排序列中选择出最小的,然后将被选出元素和序列的第一个元素互换位置(当前默认是升序排列),则互换完成后第一个元素就是整个序列的最小的元素,则一次选择排序结束。然后我们从剩下的子序列中选择出最小的,然后将该被选出来的元素和该子序列的第一个元素(即整个序列的第二个元素)互换位置,则当前整个序列的第二个元素就是当前序列中的次最小值,第二次选择排序结束。以此类推,直到该待排序列只剩下一个元素后,则整个序列有序。

2.图解

在这里插入图片描述

3.时间复杂度分析

选择排序的时间复杂度:简单选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 N 个元素,则比较次数永远都是N (N - 1) / 2。而移动次数与序列的初始排序有关。当序列正序时,移动次数最少,为 0。当序列反序时,移动次数最多,为3N (N - 1) / 2。所以,综上,简单排序的时间复杂度为 O(N2)

4.java程序实现

//选择排序
public class SelectionSort {
    public static void main(String[] args) {
        int[] arrInt = {4, 12, 13, 4, 3, 42, 33, 1, 43, 44};
        System.out.println("排序之前:");
        for (int i : arrInt) {
            System.out.print(i+" ");
        }
        System.out.println("\t");
        System.out.println("排序之后:");
        for (int i : selectionSort(arrInt)) {
            System.out.print(i+" ");
        }

    }

    private static int[] selectionSort(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            // 做第i趟排序
            int k = i;
            for (int j = i + 1; j < arr.length; j++) {
                // 选最小的记录
                if (arr[k] > arr[j]) {
                    //记下目前找到的最小值所在的位置
                    k = j;
                }
            }
            //在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换
            if (k != i) {
                //交换a[i]和a[k]
                int temp = arr[i];
                arr[i] = arr[k];
                arr[k] = temp;
            }
        }
        return arr;
    }
}

5.运行结果

在这里插入图片描述

版权声明:本博客为记录本人自学感悟,转载需注明出处!
https://me.csdn.net/qq_39657909

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页