java_之排序--选择排序

今天心情稍微有点儿不好,没关系,写代码吧,转移注意力。

1.选择排序:

在一组待排序的数当中,去选择待排序的数当中,数最小的那个数,然后将整个数放在第一个位置,然后在剩下的待排序的数当中,去选择数值最小的数然后放到第二个数的位置,依次进行排序比较,直到倒数第二小的数和最大的数进行比较位置。实现的详细代码如下:

package 排序;

public class choice {
    /**
     * 选择排序算法,在未排序序列中找到最小的元素,存放到排序序列的起始位置
     *
     * 再从剩余未排序序列中继续寻找最小的元素,然后放到排序序列末尾
     *
     * 以此类推,直到所有元素均排序完毕。
     * @param args
     */
    public static void  choice(int[] numbers){
        int size=numbers.length;//数组长度
        int temp=0;//中间变量
        for(int i=0;i<size;i++){
            int k=i;//将i的数值赋值给k
            for(int j=size-1;j>i;j--){//将长度减一个数和最小值进行比较
                if(numbers[j]<numbers[k]){
                    k=j;//k一开始的值是0,当数值比较为较小时,把下标较大的哪个数值换到下标较小的数值的位置上
                }
            }
            //交换两个数
            temp=numbers[i];
            numbers[i]=numbers[k];
            numbers[k]=temp;
        }
    }

    public static void main(String[] args){
        int[] a={52,68,59,57,23,44};
        System.out.println("排序前");
        out(a);
        System.out.println("");
        System.out.println("选择排序后");
        choice(a);
        out(a);
    }

    public static void out(int[] a){
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+",");
        }
    }
}

可通过IDE的debug模式去熟悉排序算法的具体数据走向。

数据排序过程如下:

1.第一轮进行比较:

这里比较是第一个数依次和每个数进行比较,直到将数值最小的哪个数筛选出来位置

之后函数执行情况如下:

至此,最小的数被换到了数组下标最小的位置上:

在for循环体内部,进行第二轮比较,从除了第一个数的之外的所有数进行排序,

第二轮排序如下:

刚开始的排序顺序如上:

将44换到倒数第二的位置,至此,第二轮比较结束:

第三轮比较的数值交换位置至此第三轮结束。

选择排序遍历所有数先查到数值最小的数,然后,将其位置定下来,再进行接下来的排序,但是每次以遍历的时间复杂度会增高。

从i=2,也就是数组的第三个位置进行比较

将第三轮查到的最小数与上一轮所在的数组下标

猜你喜欢

转载自blog.csdn.net/qq_35561207/article/details/83006332