常用算法Java实现之选择排序

  选择排序算法在每一步中选取最小值来重新排序,通过选择和交换来实现排序。
  具体流程如下:
  1、首先从原数组中选择最小的1个数据,将其置于第一个位置。
  2、然后从剩下的数据中再选择其中最小的一个数据,并将其置于原数组的第二个位置。
  3、不断重复选择和交换的过程,直至最后排序完成。
  假如有初始数据:25  11  45  26  12  78。
  1、第一轮排序,从原数组中选择出最小的数据,并将其置于第一个位置。第一轮排序后,顺序为:[11, 25, 45, 26, 12, 78]。
  2、第二轮排序,从剩下的数据中再选择出其中最小的一个数据,并将其置于原数组的第二个位置。第二轮排序后,顺序为:[11, 12, 45, 26, 25, 78]。
  ....... 
  3、最终顺序为:[11, 12, 25, 26, 45, 78]。
 
  选择排序是不稳定的排序。选择排序的时间复杂度和空间复杂度分别为 O(n2 ) 和 O(1) (选择排序只需要一个额外空间用于数组元素交换)。
  Java 代码实现如下:(https://github.com/xbk417/algorithm
public void sort(int[] arr) {
    int tmp;
    // 第n轮排序过程中的较小数的下标
    int small;
        
    for(int i = 0; i < arr.length - 1; i++) {
        small = i;
        // 找出最小的数的下标
        for(int j = i + 1; j < arr.length; j++) {
            if(arr[j] < arr[small]) {
                small = j;
            }
        }
        // 交换
        if(small != i) {
            tmp = arr[i];
            arr[i] = arr[small];
            arr[small] = tmp;
        }
        System.out.println(i + ":" + Arrays.toString(arr));
    }
}    

 

posted @ 2016-08-25 17:45  潇潇Leslie  阅读(290)  评论(0编辑  收藏  举报