zoukankan      html  css  js  c++  java
  • 选择排序 思想 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

    往前走,别回头!
  • 相关阅读:
    select(Linux 编程)
    Amazon DynamoDB, 面向互联网应用的高性能、可扩展的NoSQL数据库
    键值表
    工厂方法模式之C++实现
    spring(16)------spring的数据源配置
    LeetCode 206 Reverse Linked List(反转链表)(Linked List)(四步将递归改写成迭代)(*)
    地图之CLLocationManager的使用 定位功能使用
    正则则表达式大全(收集)
    文件的读取和写入(指定路径)
    二维码(带有图片)的生成
  • 原文地址:https://www.cnblogs.com/dev1ce/p/10599489.html
Copyright © 2011-2022 走看看