选择排序(Selection Sort)

一、思路

1、先找到数组中的最小元素,然后跟数组的第一个元素交换位置。

2、在剩下的元素中找到最小元素,然后跟数组的第二个元素交换位置。

3、如此重复,直到将整个数组排序好。

 

二、代码实现

    public static void sort(Comparable[] a) {
        
        int N = a.length;
        
        for(int i = 0; i < N; i++) {
            //find the index of minimum from i to N-1
            int min = i;
            for(int j = i+1; j < N; j++) {
                if(less(a[j], a[min]))
                    min = j;
            }
            
            exch(a, i, min);//put a[min] in a[i]
        }
        
    }

 

三、性能分析

结论:对于长度为N的数组,选择排序需要~N2/2次比较和N次交换。

分析:

由代码可知,对外循环每个i,内部循环都需要N-1-i次比较和一次交换。

所以总的比较次数为(N-1) + (N-2) + ……+ 2 + 1 + 0 = N(N-1)/2~N2/2。

总的交换次数为N。

posted @ 2017-03-24 09:57  我是老邱  阅读(442)  评论(1编辑  收藏  举报