简单选择排序C/C++
******由小到大排序******
算法思想: ①从左往右遍历待排序列找到其中最小的元素,然后和待排序列的第一个元素交换位置;②把从第二个元素开始的剩余元素看作新的待排序列,重复以上操作,直至最后一个元素。
下面给出代码:
//将数组a[]的left到right段的数据由小到大排序
void SelectionSort(int a[],int left,int right)
{
int i,j,k;
int temp;
for(i=left;i<right;i++){
k = i; //k记录从无序序列中挑出的最小元素的数组下标
for(j=i+1;j<=right;j++)
if(a[k]>a[j])
k = j;
//交换位置
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
算法分析:
time-complexity: i{1-->len},step{len-1,len-2,...,2,1},等差数列求和
steps = (len-1)(len-1+1)/2 = len(len-1)/2,所以时间复杂度为O(n2);
space-complexity: 不需要额外的辅助空间,空间复杂度为O(1)
在交换的过程中,可能造成相等元素的位序改变,如{2,2,1} ,所以算法不稳定;