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

排序

简单选择排序:

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

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


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

排序算法(五)——简单选择排序_第1张图片排序算法(五)——简单选择排序_第2张图片


具体实现过程:

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

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

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


	/**
	 * 选择排序:简单选择排序
	 */
	@Override
	public 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 返回true
					min = 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的先后次序保持不变,则这种排序是稳定的,否则就是不稳定。简单选择排序是一种不稳定的排序算法。






你可能感兴趣的:(数据结构及算法,简单选择排序,selecte,sort,quick,sort,排序算法,选择排序)