void choosefun(float array[],int m)
{
int i,j;
float n;
for(i=0;i<m-1;i++)
{
for(j=i+1;j<m;j++)
{
if(array[i]>array[j])
{
n=array[i];
array[i]=array[j];
array[j]=n;
}
}
}
}
以上是我写的选择排序,性能十分之差,与经典的选择排序对比,我这个如果在最不好的情况下,每次都需要移动元素。
int min,tmp,i,j;
for(i=0;i<len-1;i++){
min = i; //在本趟选择过程中,我们要将最小的元素放在a[i]的位置上
for(j=i+1;j<len;j++) /××××××××××××××××××××××××××××××××××××××××××××××××××××××××
if(a[min]>a[j]) ×在剩下的len-i个元素里选择一个最小,然后用min记住其下标
min = j; ××××××××××××××××××××××××××××××××××××××××××××××××××××××××/
/× 如果a[i]本身就已经是最小的元素,则不要交换,这样可以提高一点算法的效率×/
if(min != i){
swap(a[min],a[i]) //交换两个数
}
}