排序算法(五)——简单选择排序

来源:互联网 发布:画框图软件 编辑:程序博客网 时间:2024/05/18 00:49

排序

简单选择排序:

当读者听到这个名字—简单选择排序,是不是就觉得很简单呢?其实,简单选择排序思想也比较简单,比上一节的快速排序可能更好理解。

基本思想:选择排序的主要操作是选择,其主要思想是:每趟排序在当前待排序序列中选出关键码最小的记录,添加到有序序列中。 第i 趟在n-i+1(i=1,2,…,n-1)个记录中选取关键码最小的记录作为有序序列中的第i个记录。选择排序的特点就是记录移动的次数比较少。


下面来通过一个例子简单了解下吧。

简单选择排序简单选择排序


具体实现过程:

(1)将整个序列划分成有序区和无序区,初始化有序区为空,无序区为整个待排序列。

(2)在无序区中选取最小记录,将它与无序区中的第一个交换,使得有序区的记录扩展了一个,同时无序区的记录少了一个。

(3)重复第二步,知道无序区只剩下一个记录为止,此时全部记录都为从小到大的有序序列。


/** * 选择排序:简单选择排序 */@Overridepublic void selectSort(T[] t) {for(int i = 0; i < t.length; i++){ //对n个记录进行n趟简单选择排序T min = t[i];   int minIndex = i;  //标记最小记录位置for(int j = i+1; j < t.length; j++){    //在无序区中选择最小记录if(compare(t[j], min)){// t[j] 小于 min 返回truemin = t[j];minIndex = j;}}t[minIndex] = t[i];// 将最小记录与无序区第一个交换t[i] = min;}System.out.println("简单选择排序:");print(t);}

上面的compare 、 print 方法将在讲解完全部排序介绍,这里仍然才用泛型。


性能分析: 

(1)可以看出,简单选择排序记录的移动次数较少,待排序列为正序时,移动次数最少,为0次;待排序列为逆序时,移动次数最多,为3(n-1)次。

(2)无论记录的初始序列如何,关键码的比较次数相同,第i趟排序需要进行n-i 次比较,而又要需要n次排序,所以总的比较次数为 O(N*N)

(3)所以简单选择排序,最好、最坏的时间性能为 O(N*N)


稳定性:

若两个记录A和B值相等,但是排序后A、B的先后次序保持不变,则这种排序是稳定的,否则就是不稳定。简单选择排序是一种不稳定的排序算法。






1 0
原创粉丝点击