选择排序法的优化

xiaoxiao2021-02-28  32

百度百科给的代码

[cpp]  view plain  copy void select_sort(int*a,int n)   {       register int i,j,min,t;       for(i=0;i<n-1;i++)       {           min=i;//查找最小值           for(j=i+1;j<n;j++)               if(a[min]>a[j])                   min=j;//交换               if(min!=i)               {                   t=a[min];                   a[min]=a[i];                   a[i]=t;               }       }   }  

优化后:

[cpp]  view plain  copy void SelectSort(int r[],int n) //n为数组元素个数   {         int i ,j , min ,max, tmp;         for (i=0 ;i <n/2;i++)    /*做不超过n/2趟选择排序,这样可以节约一半的时间*/       {              min = i; max = i ;               for (j= i+1; j<= n-i-1; j++)           {                         if (r[j] > r[max])               {                              max = j ; continue ;                  }                           if (r[j]< r[min])                {                              min = j ;                          }                }   <span style="white-space:pre">        </span>//先处理最小值           tmp = r[i]; r[i] = r[min]; r[min] = tmp;   <span style="white-space:pre">        </span>//交换后最大值位置需要重新定位            if(i==max) max=min;           tmp = r[n-i-1]; r[n-i-1] = r[max]; r[max] = tmp;           }     }   运行结果

转载请注明原文地址: https://www.6miu.com/read-1400018.html

最新回复(0)