首页 > 技术文章 > 简单选择排序C/C++

daemon94011 2018-04-12 17:39 原文

******由小到大排序******

算法思想:  ①从左往右遍历待排序列找到其中最小的元素,然后和待排序列的第一个元素交换位置;②把从第二个元素开始的剩余元素看作新的待排序列,重复以上操作,直至最后一个元素。

下面给出代码:

//将数组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} ,所以算法不稳定;

 

推荐阅读