排序算法之简单选择排序

概念

通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换

Java代码实现

	public static void select(Integer[] array) {
		int min;
		for (int i = 0; i < (array.length-1); i++) {
			min = i;
			for (int j = i+1; j < array.length; j++) {
				if (array[min] > array[j]) min = j;
			} // end for compare length-i+1 elements
			// find the smallest element and swap with ith element
			if (i != min) Helper.swap(array, i, min);
		} // end for loop length-1 times
	}

 每一次比较并不替换,只是记录下较小值的位置,知道内循环完成,找到最小值,再替换

时间复杂度分析

最好情况,初始已为有序序列,需比较n(n-1)/2次,移动0次,时间复杂度为O(n2)

最差情况,初始为倒序序列,需比较n(n-1)/2次,移动n-1次,时间复杂度为O(n2)

最好情况和最坏情况的时间复杂度相同,主要是比较次数相同,应该可以用一个标记来优化。

同冒泡排序算法比较,由于移动次数较少,所以总体要略优于冒泡排序

空间复杂度分析

所需要的辅助空间为O(1)

原文地址:https://www.cnblogs.com/scarlettxu/p/3488307.html