• 排序算法(选择排序)


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

      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;
            }
    
        }
  • 相关阅读:
    tsm 存放磁带到带库
    tsm 切记
    添加路由时啥时候是dev啥时候是gw
    网卡上绑定多个IP地址
    更改本地环回地址引发的血案
    自学网络 arp_ignore/arp_announce
    do_try_to_free_pages
    如何用ssh实现端口的映射
    显示系统中所有的socket信息
    ifstat查看网络流量的原理
  • 原文地址:https://www.cnblogs.com/itall/p/11135632.html
Copyright © 2020-2023  润新知