zoukankan      html  css  js  c++  java
  • 排序算法(选择排序)

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

      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;
            }
    
        }
  • 相关阅读:
    Android笔记——在布局文件中插入另一个布局文件
    Android在代码中使用布局文件中的一个组件
    Android 判断字符串是否为空
    android .9图的作用
    Android之ViewPager组件实现左右滑动View
    java 字符串判断是否相等
    动态获取R.drawable.xx资源
    解决ViewPager多次刷新后重叠问题
    解决分布式一致性问题 学习2
    解决分布式一致性问题 学习1
  • 原文地址:https://www.cnblogs.com/itall/p/11135632.html
Copyright © 2011-2022 走看看