一个费力不讨好的选择排序

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])  //交换两个数
      }
    }



原文地址:https://www.cnblogs.com/JSD1207ZX/p/9386257.html