数据结构排序算法——简单选择排序

简单选择排序

从待排序的数列中选择一个最小的数,放到有序数列的最后一位,最始的有序数列就是无序数列的第一个数,就相当于用数列的第一个元素分别与其它元素比较,选出最小数的下标,然后将最小数与有序数列的最一个数交换位置。因为每次选择的都是最小的数,所以经过排序之后,待排序数列变成有序(待排序数列中选择的最小的数实际上是有序数列中最大的数,因为比它更小的数已在上一次比较的时候被提到有序数列了)。

时间复杂度:O(n2)

java代码实现

 /**
     * 选择排序
     * @param a
     */
    public static  void selectSort(int[] a){
        //取数组长度
        int len = a.length;
        //取待排序数列中的第一个数做为最小的数
        for (int i = 0 ;i<len -1;i++){
            int min = i;
            for (int j = i+1;j<len;j++){
                //用设定的最小的数与待排序数列中的每一个数比较
                if (a[min] > a[j]){
                    //如果发现假设的最小的数不是真正的最小的数,则将比他小的数的下标赋值给min
                    min = j;
                }
            }
            if(min != i){//min不等于i,假设的最小值不是最小值,把真正的最小值交换到i的位置上去
                swap(a,min,i);
            }
            //打印每次选择排序的结果
            print(a,a.length,i+1);
        }
        //打印最终排序结果
        printResult(a,a.length);
    }

交换方法:

public  static void swap(int[] elem,int i,int j){
        int temp = elem[i];
        elem[i] = elem[j];
        elem[j] = temp;
    }

打印每次比较结果的方法:

/**
     * 打印每次比较的结果
     * @param a 待排序数组
     * @param n 数组长度
     * @param i 第几次排序
     */
    public static void print(int[] a,int n,int i){
        System.out.println("第"+i+"次");
        for (int j =0;j<n;j++){
            System.out.print(" "+a[j]);
        }
        System.out.println();
    }

打印最终结果的方法:

/**
     * 打印最终排序结果
     * @param a
     * @param n
     */
    public static void printResult(int[] a,int n){
        System.out.println("最终排序结果:");
        for(int j = 0 ;j<n;j++){
            System.out.print(" "+a[j]);
        }
        System.out.println();
    }

结语:关于算法的性能分析,最好的方法就是在实际操作中进行体会,如果实在觉得有些地方不好理解,可以用笔画一下方法思路。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值