请写出直接选择排序的算法,并分析算法的时间复杂度和空间复杂度。是否稳定的排序?如果是不稳定的,试举出一例。
void SelectSort(RecType R[] , int n)
{ ∥ 对记录序列 R[1..n] 作直接选择排序。
for(i=1; i<n; i++)
{ ∥ 选择第 i 小的记录,并交换到位
k=i; ∥ 假定第 i 个元素的关键字最小
for(j=i+1;j<=n;j++) ∥ 找最小元素的下标
if(R[j].key<R[k].key) k=j;
if(i!=k) R[i]←→R[k]; ∥ 与第 i 个记录交换
}∥for
}∥SelectSort //
时间复杂度为: O ( n2 ) //
空间复杂度为: O(1) //
不稳定的排序:如 2 , 2 , 1 排序后为: 2 , 2 , 1 //