今天上了的时候老师讲了选择排序,其中有简单的选择排序和改进后的,其中改进后的不是每次发现比较大的值就交换,而是更新最大值的下标,然后每一趟只交换依次,有可能不交换,这样效率会很好- //选择排序算法
- void selectSort(int array[],int length)
- {
- int i,j,temp;//定义用于交换的变量temp
- for(i=0;i<length-1;i++)//比较length-1趟,外循环控制趟数
- for(j=i+1;j<length;j++)//内循环第i个数依次与后面的数比较
- if(array[j]>array[i])//若大于,则交换,这样排序结束后由大到小排列
- {
- temp = array[i];//交换数据
- array[i] = array[j];
- array[j] = temp;
- }
- }
- //改进选择排序算法
- void selectSort2(int array[],int length)
- {
- int i,j,k,temp; //定义用于交换的变量temp
- for(i=0;i<length-1;i++)
- {
- k = i;//记录当前乱序的最大值的下标
- for(j=i+1;j<length;j++)
- if(array[j]>array[i])
- k = j;//发现数据比最大值大,更新下标
- if(i!=k) // 若i!=k,说明假定的最大值很真实的最大值下标不一样,交换,若一样就不用交换了
- {
- temp = array[i];
- array[i] = array[k];
- array[k] = temp;
- }
- }
- }
复制代码
|
|