• 选择排序 思想 JAVA实现


    已知一个数组 9、29、95、47、79、37、18、56、96、22 使用选择排序是数组有序

    选择排序同样是一个运行时间为O(N²)的排序算法。

    算法思想:(以从小到大为例)

    9、29、95、47、79、37、18、56、96、22    数组元素

    0、1、  2、  3、  4、  5、  6、  7、  8、  9      数组下标

    选择排序是选择一个位置进行排序,将有序元素排放在数组最左边。

    第一轮排序

    选择数组的第一个位置上的元素开始与其他元素进行逐个比较,即index[0]与index[1]、index[2]、index[3]、index[4]、index[5]、index[6]、index[7]、index[8]、index[9]比较,

    将最小的元素放在index[0]所在的位置上。(期间进项相互比较和复制)。

    第二轮排序

    选择数组的第二个位置上的元素开始与其他元素进行逐个比较,即index[1]与index[2]、index[3]、index[4]、index[5]、index[6]、index[7]、index[8]、index[9]比较,

    将最小的一个元素放在index[1]所在的位置上。

    第三轮排序

    。。。。

    直到整个数组有序。

    以下是通过java实现

    private int[] Array;

    private int currentIndex;

    private int maxIndex;

    public SelectOrder(int size) {
               this.Array = new int[size];
               this.currentIndex = 0;
               this.maxIndex = size-1;
    }

    public void insert(int value) {
               if(this.maxIndex<this.currentIndex) {
                    System.out.println("数组已满");
               }else {
                    this.Array[this.currentIndex++] = value;
               }
    }

    /**
    * 选择排序的思想是“选择一个位置”进行排序,将有序元素放在数组最左边
    */
    public void order() {
              for(int i=0;i<this.Array.length-1;i++) {//外层循环控制位置
                   for(int j=i+1;j<this.Array.length;j++) {//里层循环进行循环比较
                         onChange(i,j);
                   }
               }
    }

    public void onChange(int out,int in) {
                if(this.Array[out]>this.Array[in]) {
                         int temp = this.Array[in];
                         this.Array[in] = this.Array[out];
                         this.Array[out] = temp;
                 }
    }

    public void show() {
                for (int i : Array) {
                       System.out.println(i);
                }
    }

    最终排序结果为: 9、18、22、29、37、47、56、79、95、96

    往前走,别回头!
  • 相关阅读:
    设计模式-11-代理模式
    设计模式-10-装饰者
    设计模式-9-组合
    设计模式-8-适配器
    设计模式-7-原型模式
    设计模式-6-建造者
    设计模式-5-单例模式
    u-boot-1.1.6 设置新分区支持设备树
    u-boot-2014.10移植(8)重定位,支持NAND启动
    u-boot-2014.10移植(7)修改环境变量的存储位置
  • 原文地址:https://www.cnblogs.com/dev1ce/p/10599489.html
Copyright © 2020-2023  润新知