简单选择排序

来源:互联网 发布:淘宝优惠券winppo 编辑:程序博客网 时间:2024/06/17 03:34

简单选择排序

简单选择排序的思路很简单,首先,找到数组中最小的元素,将它和数组中的第一个元素交换,其次在剩下的元素中找到最小的元素,将它与数组中的第二个元素交换,如此往复,直到将整个数组排序。这种排序的算法叫做选择排序,因为它总是在未排序的数组中找到最小元素,每次找到最小的元素后,将它与数组第一个未排序的位置交换,因此内循环每次结束后,都将一个元素的位置最终确定下来。

看下选择排序的实现:

public class SelectionSort {    public static void sort(int[] a) {        if (a == null || a.length == 0) {            return;        }        for (int i = 0; i < a.length; i++) {            int minIndex = i;            for (int j = i + 1; j < a.length; j++) {                if (a[minIndex] > a[j]) {                    minIndex = j;                }            }            //将a[i+1,a.length-1]的最小值和a[i]交换            exchange(a, i, minIndex);        }    }    private static void exchange(int[] a, int i, int j) {        int tmp = a[i];        a[i] = a[j];        a[j] = tmp;    }}

选择排序的实现很简单,也很容易理解。内循环需要遍历剩下未排序的数组,找到最小值。

复杂度分析

选择排序的交换次数为n次,n是数组的大小。

选择排序的比较次数为(n1)+(n2)++1=n(n1)/2 ~ n2/2

因此,选择排序的时间复杂度为O(n2),并且和输入无关。

选择排序的空间复杂度为O(1)

原创粉丝点击