发 帖  
原厂入驻New
发烧友10周年庆典,全网超值优惠来袭!千元现金券,下单抽奖赶紧参与》》

冒泡排序法三部曲の二冒泡排序法的优化

7 天前  101 c语言 冒泡排序法
分享
0
本帖最后由 卢小二 于 2019-9-14 11:23 编辑

环境:VS2017  C language
   在冒泡排序法三部曲の一冒泡排序法的原理之后,其实存在一些可优化的问题,首先就是假如是{1,2,3,6,4}这样的数组,经过一次冒泡之后数组变为{1,2,3,4,6}就已经是有序数列,可是编码中并不会识别,所以本次加入了一个数组顺序变换标识符,在每小轮变换前将标识符置一,在本小轮变换过程中如果发生了数组交换就将标识符置零。每小轮变换完成后判断标识符,如果标识符为1即表明数组顺序未发生变化,则直接break跳出主循环。
.h文件
  1. <!--StartFragment--><p>#IFndef BUBBLE_H_</p><p>#define BUBBLE_H_</p><p>
  2. </p><p>void improve(int *array, int number)</p><p>{</p><p><span class="">        </span>int temp;  //中间数据缓存器</p><p><span class="">        </span>int times = 0;</p><p><span class="">        </span>for (int i = 0; i < number - 1; i++,times++)   //外部循环</p><p><span class="">        </span>{</p><p><span class="">                </span>//标记转换</p><p><span class="">                </span>int translate = 1;</p><p><span class="">                </span>for (int i = 0; i < number - 1; i++)</p><p><span class="">                </span>{</p><p><span class="">                        </span>if (array[i] > array[i + 1])</p><p><span class="">                        </span>{</p><p><span class="">                                </span>temp = array[i];</p><p><span class="">                                </span>array[i] = array[i + 1];</p><p><span class="">                                </span>array[i + 1] = temp;</p><p><span class="">                                </span>translate = 1;</p><p><span class="">                        </span>}</p><p><span class="">                </span>}</p><p><span class="">                </span>if (translate == 0)</p><p><span class="">                </span>{</p><p><span class="">                        </span>break;   //结束所有循环</p><p><span class="">                </span>}</p><p><span class="">        </span>}</p><p><span class="">        </span>printf("The time of sort is :%d\n", times);</p><p><span class="">        </span>return array;</p><p>}</p><p><!--StartFragment-->#endif<!--EndFragment-->

  3. </p><!--EndFragment-->
复制代码
主函数main.c
  1. <!--StartFragment--><p>#include<stdio.h></p><p>#include"bubble.h"</p><p>
  2. </p><p>int main()</p><p>{</p><p><span class="">        </span>int array[] = { 1,2,3,4,5,5,7,6,10,9,8 };</p><p><span class="">        </span>int m = sizeof(array) / sizeof(int);</p><p><span class="">        </span>printf("The primary array is\n");</p><p><span class="">        </span>for (int i = 0; i < m; i++)</p><p><span class="">                </span>printf("%d\t", array[i]);</p><p><span class="">        </span>printf("\n");   //此处加个换行,用于显示优化后的排序算法内部进行的次数</p><p><span class="">        </span>improve(array, m);</p><p><span class="">        </span>printf("After sorted,the sequence is:\n");</p><p><span class="">        </span>for (int i = 0; i < m; i++)</p><p><span class="">                </span>printf("%d\t", array[i]);</p><p><span class="">        </span>return 0;</p><p>}</p><!--EndFragment-->
复制代码
运行结果
QQ截图.png
可以看到,与原理版中共进行10*10=100次比较过程想必,本结构只需要进行10次比较,效率提升了9倍。其实这也不是最终版,程序还可以进一步优化,这将在冒泡排序最终版中说明。

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

发经验
课程
    关闭

    站长推荐 上一条 /10 下一条

    快速回复 返回顶部 返回列表