排序算法入门之冒泡排序优化.doc
上传人:sy****28 上传时间:2024-09-10 格式:DOC 页数:2 大小:14KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

排序算法入门之冒泡排序优化.doc

排序算法入门之冒泡排序优化.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

原创文章来源:www.shishicaimh.com原创文章来源:shishicaimh.com排序算法入门之冒泡排序优化先来说说,冒泡排序哪些地方需要优化:根据上一篇文章的内容,可以知道冒泡排序的核心是两两对比进行交换。如果有一个无序序列(2,1,3,4,5,6,7,8,9,10)按照上一篇文章的代码,从第一次循环交换后的操作,可以说都是没必要的。所以,这些操作就是我们需要优化的地方。那么如何优化?通过观察可以看到,造成没必要的操作主要原因是后面8个数的顺序都已经是有序。所以,我们可以通过设置一个标记变量,标记序列中的数是否在循环结束前就已经排好序代码:[cpp]#include<stdio.h>voidswap(int*a,int*b);intmain(){intarray[10]={2,1,3,4,5,6,7,8,9,10};inti,j;intflag=1;//设置标记变量for(i=0;i<10&&flag;i++){flag=0;//只要flag在下一次外循环条件检测的时候值为0,就说明已经排好序,不用继续循环for(j=9;j>i;j--){if(array[j]<array[j-1]){swap(&array[j],&array[j-1]);flag=1;//如果有交换,就将标记变量赋1}}}for(i=0;i<10;i++){printf("%d\n",array[i]);}return0;}voidswap(int*a,int*b){inttemp;temp=*a;*a=*b;*b=temp;}根据优化过的代码,当最好情况的时候,冒泡排序的时间复杂度是O(n