• 排序算法(4)--Selection Sorting--选择排序[1]--Simple Selection Sort--简单(直接)选择排序


    1.基本思想

        在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

    2.实现原理

        每趟从待排序的记录序列中选择关键字最小的记录放置到已排序表的最前位置,直到全部排完。关键是在剩余的待排序记录序列中找到最小关键码记录。

    3.代码实例

    (1)代码:

    /**
    
     * 简单选择排序
    
     * 原理:从i到arr.length-1,每次迭代将i到arr.length-1中最小(最大)的那个数交换到i的位置,然后i++,再循环
    
     * @param arr 待排序的数组
    
     */
    
    public static void simpleSelectSort(int[] arr){
        //minLoc用于记录i+1到arr.length-1这个区间的最小值的下标(i会递增),i表示要交换的位置。
        for (int i=0,j=0,minLoc=0; i<arr.length; i++) {
            minLoc = i;
            for (j=i+1; j < arr.length; j++) {//找出i+1到args.length-1这个区间的最小值的下标
                if(arr[j] < arr[minLoc]){
                    //记录最小值下标
                    minLoc = j;
                }
            }
            if(minLoc!=i){//如果minLoc!=i,说明minLoc有变化,就进行交换
                int temp = arr[i];
                arr[i] = arr[minLoc];
                arr[minLoc] = temp;
            }
        }
    }
    
    public static void main(String[] args) {
        int[] array = {12,53,48,26,43,62,46,48};
        System.out.print("before sort:");
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }
        System.out.println();
        simpleSelectSort(array);
        System.out.print("after  sort:");
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }
    }

    (2)结果:

    before sort:12 53 48 26 43 62 46 48

    after  sort:12 26 43 46 48 48 53 62

     

    4.算法分析

    (1)从待排序序列中,找到关键字最小的元素;

    (2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;

    (3)从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。

    5.排序特点

    简单选择排序是不稳定的排序。

      (1)时间复杂度: 整个排序需比较n-1次,分别为n-1,n-2...1。故

      时间复杂度:O=(n-1)+(n-2)+...+1=O(n2)

      (2)空间复杂度: 一个辅助空间,故

      空间复杂度为:O(1)

  • 相关阅读:
    CBUUID UUIDString unrecognized selector sent to instance 错误
    利用php的序列化和反序列化来做简单的数据本地存储
    php 执行外部命令exec() system() passthru()
    php 使用 restler 框架构建 restfull api
    使用ar命令删除iOS静态库重复编译的.o文件
    c++ string 与 char 互转 以及base64
    CLGeocoder Error Domain=kCLErrorDomain Code=2
    mac air/pro 启用三指拖动手势
    osx 10.11.5 El Capitan U盘制作安装
    php cli模式下获取参数的方法
  • 原文地址:https://www.cnblogs.com/yysbolg/p/8664671.html
Copyright © 2020-2023  润新知