选择排序

所谓选择排序,就是从头到尾逐个确定元素的过程,比如: 3 1 4 5,现在我要对他进行升序排序,最后结果也就是:1 3 4 5.

先确定第一个位置:也就是3 1 4 5中的3,把这个3先按住不动,然后后面的依次和它比较,如果比他小就交换.

void sort(int *p,int *q)
{
    *p^=*q;
    *q^=*p;
    *p^=*q;
}
void selectsort(int* p,int n)
{
    for(int i=0;i<n-1;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            if(p[idx]>p[j])
            {
                sort(&p[idx],&p[i]);
            }
        }
    }
}

对于此代码,仔细分析可以看出,其中的多趟比较可能是没有必要的,下面进行优化,还是上面的思路,按住3不动,然后后面的元素与3比较,但是此刻如果遇到比3小的不进行交换,只是先记录索引,直到最后一趟比较完毕才进行判断是否需要进行交换。

void sort(int *p,int *q)
{
    *p^=*q;
    *q^=*p;
    *p^=*q;
}
void selectsort(int* p,int n)
{
    int idx;
    for(int i=0;i<n-1;i++)
    {
        idx=i;
        for(int j=i+1;j<n;j++)
        {
            if(p[idx]>p[j])
            {
               idx=j;
            }
        }
        if(idx!=i)
        {
             sort(&p[idx],&p[i]);
        }
    }
}

 

posted @ 2022-01-10 14:01  sunshine_gzw  阅读(13)  评论(0编辑  收藏  举报