zoukankan      html  css  js  c++  java
  • 常见数据结构与算法-选择排序

             常见数据结构与算法-选择排序

                                 作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

     

     

     

    一.选择排序概述

    1>.选择排序总结

      选择排序
        属于选择排序
        两两比较大小,找出极值(极大值或极小值)被放置在固定的位置,这个固定位置一般指的是某一端
        结果分为升序和降序排列
    
      降序
        n个数从左至右,索引从0开始到n-1,两两依次比较,记录大值索引,此轮所有数比较完毕,将大数和索引0数交换,如果大数就是索引1,不交换。第二轮,从1开始比较,找到最大值,将它和索引1位置交换,如果它就在索引1位置则不交换。依次类推,每次左边都会固定下一个大数。
    
      升序
        和降序相反
    
      选择排序总结:
        简单选择排序需要数据一轮轮比较,并在每一轮中发现极值
        没有办法知道当前轮是否已经达到排序要求,但是可以知道极值是否在目标索引位置上
        遍历次数1,...,n-1之和n(n-1)/2
        时间复杂度O(n2)
        减少了交换次数,提高了效率,性能略好于冒泡法

    2>.选择排序原理

    初始值:[1 9 8 5 6 7 4 3 2]        
    
    第一趟:[9 1 8 5 6 7 4 3 2]    #选择出此轮最大数9,和索引0数交换选择
    
    第二趟:[9 8 1 5 6 7 4 3 2]    #选择出次轮最大数8,和索引1数交换,下面的工作方式以此类推。
    
    第三趟:[9 8 7 5 6 1 4 3 2]
    
    第四趟:[9 8 7 6 5 1 4 3 2]
    
    第五趟:[9 8 7 6 5 1 4 3 2]
    
    第六趟:[9 8 7 6 5 4 1 3 2]
    
    第七趟:[9 8 7 6 5 4 3 1 2]
    
    第八趟:[9 8 7 6 5 4 3 2 1]

     

    二.使用编程语言实现选择排序

    1>.Python实现版本

      博主推荐阅读:
        https://www.cnblogs.com/yinzhengjie/p/10958697.html

    2>.Java实现版本

    /**
     *    选择排序
     *     @author 尹正杰
     */
    public class ArrayDemo3 {
        public static void main(String[] args) {
            int[] arr = {1,20,3,80,5,200,175,10};
            System.out.println("排序前:"); 
            printArray(arr);
            selectSort(arr);
            System.out.println("排序后:");
            printArray(arr);
        }
        
        public static void selectSort(int[] arr) {
            for (int i = 0; i < arr.length - 1 ; i++) {
                //每一次比较,都是索引i和下一个元素(i + 1)进行比较
                for (int j = i + 1; j < arr.length; j++) {
                    //当前一个元素比另一个元素大的时候,进行位置互换
                    if (arr[i] > arr[j]) {
                        int temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                    }
                }
            }
        }
        
        public static void printArray(int[] arr) {
            System.out.print("	");
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i] + "	");
            }
            System.out.println();
        }
    }

  • 相关阅读:
    Linux
    网络
    线程池
    JVM内存结构相关知识
    JVM命令
    maven
    多线程
    AJAX、JSON
    JSP、EL、JSTL
    Mysql面试总结
  • 原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12219870.html
Copyright © 2011-2022 走看看