选择排序


选择排序

V1.0

    /**
     * 选择排序(比较大小直接交换)
     */
    public void select(int[] arr){
        for(int i=0,len=arr.length;i<len-1;++i){
            for(int j=i+1;j<len;++j){
                if(arr[i] < arr[j])
                    continue;
                //直接交换(交换次数多)
                arr[i] = arr[i]^arr[j];
                arr[j] = arr[i]^arr[j];
                arr[i] = arr[i]^arr[j];
            }
        }
    }

V2.0

    /**
     * 选择排序(找出最小值再交换)
     * 思路: 首先找出数组中最小元素,与数组第一个元素交换,
     *       然后找出剩余数组中最小元素与数组第二个元素交换,
     *       如此往复,直到进行到数组最后一个元素
     */
    public void selection(int[] arr){
        for(int i=0,len=arr.length;i<len-1;++i){
            int min = i;
            for(int j=i+1;j<len;++j){
                if(arr[min] > arr[j])
                    min = j;    //只记录索引,不交换
            }
            if(min == i)
                continue;
            //找出最小值后再交换
            arr[i] = arr[i]^arr[min];
            arr[min] = arr[i]^arr[min];
            arr[i] = arr[i]^arr[min];
        }
    }

文章作者: Bryson
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Bryson !
评论
 上一篇
插入排序 插入排序
插入排序 概述 插入排序所需的时间与数组的初始顺序有关,对于已经有序或部分有序的数组进行排序时有优势 实现 /** * 插入排序 * 思路: 将一个元素插入到已经有序的序列中; * 步骤: 1.
2018-10-09
下一篇 
union-find算法 union-find算法
Union-Find算法 基本介绍 可以想象一张地图上有很多点,有些点之间是有道路相互联通的,而有些点则没有。如果我们现在要从点A走向点B,那么一个关键的问题就是判断我们能否从A走到B呢?换句话说,A和B是否是连通的. 定义un
2018-10-01
  目录