选择排序 思想 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

往前走,别回头!
原文地址:https://www.cnblogs.com/dev1ce/p/10599489.html