选择排序法的优化

来源:互联网 发布:python执行shell文件 编辑:程序博客网 时间:2024/05/18 02:30

百度百科给的代码

[cpp] view plain copy
  1. void select_sort(int*a,int n)  
  2. {  
  3.     register int i,j,min,t;  
  4.     for(i=0;i<n-1;i++)  
  5.     {  
  6.         min=i;//查找最小值  
  7.         for(j=i+1;j<n;j++)  
  8.             if(a[min]>a[j])  
  9.                 min=j;//交换  
  10.             if(min!=i)  
  11.             {  
  12.                 t=a[min];  
  13.                 a[min]=a[i];  
  14.                 a[i]=t;  
  15.             }  
  16.     }  
  17. }  


优化后:

[cpp] view plain copy
  1. void SelectSort(int r[],int n) //n为数组元素个数  
  2. {    
  3.     int i ,j , min ,max, tmp;    
  4.     for (i=0 ;i <n/2;i++)    /*做不超过n/2趟选择排序,这样可以节约一半的时间*/  
  5.     {     
  6.         min = i; max = i ;  
  7.             for (j= i+1; j<= n-i-1; j++)  
  8.         {    
  9.                     if (r[j] > r[max])  
  10.             {     
  11.                         max = j ; continue ;     
  12.             }      
  13.                     if (r[j]< r[min])   
  14.             {     
  15.                         min = j ;     
  16.                     }       
  17.         }  
  18. <span style="white-space:pre">        </span>//先处理最小值  
  19.         tmp = r[i]; r[i] = r[min]; r[min] = tmp;  
  20. <span style="white-space:pre">        </span>//交换后最大值位置需要重新定位   
  21.         if(i==max) max=min;  
  22.         tmp = r[n-i-1]; r[n-i-1] = r[max]; r[max] = tmp;      
  23.     }    
  24. }  
运行结果


原创粉丝点击