//排序无非就干两件事,比较+交换
//如果想优化效率,比较不能省,但是交换可以省,比而不换只记下标
#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;
}