简单选择排序算法,思路是这样的,取一个中间变量min来记录最小的数的下标,第一次循环,i = 1,min的下标首先为1,然后j =2一直遍历[]到数组结束,Array[min]和Array[j]作比较,如果Array[min] > Array[j],则min = j,j再取下一个数,一直到j遍历到数组的结尾,则此时Array[min]的值为第一次遍历的最小值,Array[min]h和Array[1]交换;第二次循环........直到i = k-1。
代码如下:
void Selected(int Array[], int k)
{
int i;
int j;
int min;
int tmp;
for(i = 0; i <=k -2; ++i)
{
min = i;
for(j = i+1; j <=k-1; ++j)
{
if(Array[min] > Array[j])
min = j;
}
if(min != i )
{
tmp = Array[min];
Array[min] = Array[i];
Array[i] = tmp;
}
}
}
这个选择排序法和之前的冒泡排序法的初级版本比较像,不同点在于选择排序法在每一次的遍历中先把最小的元素找出来,然后再与第i个数做交换,而不是每次元素的值小于循环的第一个数时都进行交换,这样就提高了算法的效率。
选择排序法的空间复杂度,同样,这里只有几个新的元素i,j,min,tmp,空间复杂度小,时间复杂度,看最好的情况,最好的情况是数组已经排好了,这个时候交换的次数为零,但是遍历的次数n(n-1)/2,最坏的情况,遍历的次数为n(n-1)/2,交换的次数为n,所以总的算法的时间复杂度为o(n^2)。