46.对数组进行选择排序,实现选择排序的基础版与优化版



//排序无非就干两件事,比较+交换
//如果想优化效率,比较不能省,但是交换可以省,比而不换只记下标


#include <stdio.h>
void mySwap(int *pa ,int *pb)
{
    *pa ^= *pb;
    *pb ^= *pa;
    *pa ^= *pb;
}
//基础版
void selectSort(int *p,int n)//升序
{
    int i,j;
    for(i = 0;i<n-1;i++)
    {
        for(j = i+1;j<n;j++)
        {
            if(p[i] > p[j])//边比边换
                mySwap(&p[i],&p[j]);
        }
    }
}

//优化版
void selectSort2(int *p,int n)//升序,
{
    int i,j;
    int idx;
    for(i = 0;i<n-1;i++)
    {
        idx = i;
        for(j = i+1;j<n;j++)
        {
            if(p[idx] > p[j])//比而不换只记下标
                idx = j;
        }

        if(idx != i)
            mySwap(&p[idx],&p[i]);//比完再换
    }
}

int main(void)
{
    int arr[10] = {1,3,5,7,9,2,4,6,8,0};
    selectSort2(arr,10);
    int i;
    for(i = 0;i<10;i++)
        printf("%d\n",arr[i]);

    return 0;
}

 

posted @ 2018-08-22 15:58  2018年8月10日注册  阅读(182)  评论(0编辑  收藏  举报