A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天上了的时候老师讲了选择排序,其中有简单的选择排序和改进后的,其中改进后的不是每次发现比较大的值就交换,而是更新最大值的下标,然后每一趟只交换依次,有可能不交换,这样效率会很好
  1. //选择排序算法
  2. void selectSort(int array[],int length)
  3. {
  4.     int i,j,temp;//定义用于交换的变量temp
  5.     for(i=0;i<length-1;i++)//比较length-1趟,外循环控制趟数
  6.         for(j=i+1;j<length;j++)//内循环第i个数依次与后面的数比较
  7.             if(array[j]>array[i])//若大于,则交换,这样排序结束后由大到小排列
  8.             {
  9.                 temp = array[i];//交换数据
  10.                 array[i] = array[j];
  11.                 array[j] = temp;
  12.             }
  13. }
  14. //改进选择排序算法
  15. void selectSort2(int array[],int length)
  16. {
  17.     int i,j,k,temp; //定义用于交换的变量temp
  18.     for(i=0;i<length-1;i++)
  19.     {
  20.         k = i;//记录当前乱序的最大值的下标
  21.         for(j=i+1;j<length;j++)
  22.             if(array[j]>array[i])
  23.                 k = j;//发现数据比最大值大,更新下标
  24.         if(i!=k) // 若i!=k,说明假定的最大值很真实的最大值下标不一样,交换,若一样就不用交换了
  25.         {
  26.             temp = array[i];
  27.             array[i] = array[k];
  28.             array[k] = temp;
  29.         }
  30.     }
  31. }
复制代码


2 个回复

正序浏览
对,数据量小的时候差距不大
回复 使用道具 举报
数据量 极大的时候才会有用吧。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马