选择排序-java

来源:互联网 发布:高性能网络编程 陶辉 编辑:程序博客网 时间:2024/04/30 15:15

选择排序-java

转载请注明出处:http://blog.csdn.net/a740169405/article/details/50716196

思路:

选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n - 1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。

循环方式:

/** * 选择排序(循环) * @param arr 数组 */private static void selectSort(int[] arr) {    int index;    for (int i = 0; i < arr.length - 1; i++) {        index = i;        for (int j = i + 1; j < arr.length; j++) {            if (arr[j] < arr[index]) {                index = j;            }        }        if (index != i) {            change(arr, i, index);        }    }}

递归方式:

/** * 选择排序(递归) * @param arr 数组 * @param index 目标位置 */private static void selectSort2(int[] arr, int index) {    if (index < 0 || index >= arr.length - 1) {        return;    }    int tag = index;    for (int i = index; i < arr.length; i++) {        if (arr[i] < arr[index]) {            tag =  i;        }    }    if (tag != index) {        change(arr, tag, index);    }    selectSort2(arr, index+1);}

调用代码:

int[] array = new int[] {3, 7, 4, 56, 34, 12, 90, 67, 24};int[] arr = new int[] {1, 45, 78, 23, 12, 98, 150, 1, 45};selectSort(array);System.out.println(Arrays.toString(array));selectSort2(arr, 0);System.out.println(Arrays.toString(arr));

结果:
结果

时间复杂度分析:

在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5
8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。

时间复杂度参考:
http://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html

0 0