排序算法(选择排序)

  关于排序算法,常见的大致有:冒泡排序、插入排序、选择排序、快速排序、归并排序、桶排序、计数排序等。每一种排序算法都有它们各自的优劣和适用场景。一般可以从这么几个角度来衡量排序算法:

  1.最好时间复杂度、最坏时间复杂度、平均时间复杂度

  2.是否是原地排序算法:原地排序算法,指空间复杂度为O(1)

  3.是否是稳定排序算法:稳定排序算法,指如果待排序序列中有值相等的元素,经过排序之后,值相等元素的顺序保持不变

  关于选择排序:

#描述选择排序:
    1.选择排序的思路,与插入排序思路类似。
    2.将待排序数据分为:已排序区间、未排序区间
    3.区别在于选择排序,每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾
    4.重复过程3,直到未排序区间的元素为空,则排序结束

  代码实现:

/**
     * 选择排序:
     *  1.选择排序的思路,与插入排序思路类似
     *  2.将待排序数据分为:已排序区间、未排序区间
     *  3.区别在于选择排序,每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾
     *  4.重复过程3,直到未排序区间的元素为空,则排序结束
     *  5.选择排序是原地排序:空间复杂度O(1)
     *  6.选择排序是不稳定的排序算法
     *  7.最好时间复杂度、最坏时间复杂度、平均时间复杂度:都是O(n^2)
     *
     * @param a 待排序序列
     * @param n 数据规模
     */
    public static void selectionSort(int[] a,int n){
        if(n <=1) return;

        // 最小值索引
        int minIndex=0;
        // 临时存储值
        int temp=0;

        // 进行n-1次比较即可
        for(int i=0;i<n-1;i++){
            // 记录每次比较最小值
            minIndex = i;
            // 第i次需要比较的数据
            for(int j=i+1;j<n;j++){
                if(a[minIndex]>a[j]){
                    // 记录最小值位置
                    minIndex = j;
                }
            }

            // 执行交换
            temp = a[i];
            a[i] = a[minIndex];
            a[minIndex] = temp;
        }

    }

猜你喜欢

转载自www.cnblogs.com/itall/p/11135632.html