算法思路:
每趟走访元素揪出一个最小(或最大)的元素,和相应位置的元素交换。(用数组{6,9,13,2,4,64} 举例)
{},{6 9 13 【2】 4 64} //第一趟,揪出2
{2},{ 9 13 6 4 64} //把2和第一位的元素互换
{2},{ 9 13 6 【4】 64} //第二趟,揪出4
{2 4},{ 13 6 9 64} //把4和第二位的元素互换
... ...
性质:
选择排序是一种原地排序(只有常数个元素存到数组以外的空间),最坏的时间复杂度,和平均时间复杂度都是n2。它是不稳定的排序算法。。
*选择排序和冒泡排序的区别:
它俩写起来很像,运行过程也有点像。但是性能上,选择排序要稍好一些,简单的理解就是冒泡排序总是在进行交换,而选择排序相比之下交换的次数少很多。
另,冒泡是稳定的,选择排序是不稳定的。
代码:
int[] SelectionSort1(int[] a) { int item; 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; } if (a[minIndex] != a[i]) { item = a[i]; a[i] = a[minIndex]; a[minIndex] = item; } } return a; }