AKever

导航

算法 -- (2)简单选择排序(选择)

数据结构 -- (2)简单选择排序(选择)

设所排序序列的记录个数为n。i取1,2,…,n-1,从所有n-i+1个记录(Ri,Ri+1,…,Rn)中找出排序码最小的记录,与第i个记录交换。执行n-1趟 后就完成了记录序列的排序。

最坏情况下,即待排序记录初始状态是按逆序排列的,则需要移动记录的次数最多为3(n-1)。简单选择排序过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关。当i=1时,需进行n-1次比较;当i=2时,需进行n-2次比较;依次类推,共需要进行的比较次数是(n-1)+(n-2)+…+2+1=n(n-1)/2,即进行比较操作的时间复杂度为O(n^2),进行移动操作的时间复杂度为O(n)。

C++算法实现

template <class datatype >
void seqlist <datatype > ∷insertsort( )
{
    int i, j, k;
    datatype temp;
    for(i =1;i<last;i++ )
    {
        k=i;   //几下当前的元素位置
        for(j=i+1;j<=last;j++)
            if(data[j]<data[k])
                k=j;  //但与之比较元素比他data[k]小时,k被j替换,data[k]=data[j]=最小
        if(i!=k)  //第i个元素与第k个元素交换,一轮比较之后
        {
            temp=data[k];
            data[k]=data[i];
            data[i]=temp;
        }
    }
};

 

posted on 2014-02-18 10:43  AKever  阅读(360)  评论(0)    收藏  举报