改进版冒泡排序
来源:互联网 发布:mysql bool 编辑:程序博客网 时间:2024/06/05 18:50
冒泡法排序:
改进之处:n个元素比较n-1趟,第i趟比较n-i次
若在其中的某一趟排序中:若始终未发生元素的交换说明已经排序号好,函数结束!
#include<stdio.h>#include<time.h> //clock函数#define REPEAT 1E8 //函数重复执行次数typedef int ElemType;void bubble_sort1(ElemType array[],int n){ElemType temp;for(int i=0;i<n-1;++i)//比较n-1趟{int flag = 0;//标志位:一趟排序中是否发生了交换for(int j=0;j<n-i-1;++j)//第j趟排序比较n-j次(j从0开始的所以还得减-1)n-j-1{if(array[j] < array[j+1]){temp = array[j];array[j] = array[j+1];array[j+1] = temp;flag = 1;//此趟排序中发生了交换,若未发生交换,表明已经有序}}if(flag == 0)//一趟排序中未发生交换,说明已经有序,函数结束!break;}}void bubble_sort2(ElemType array[],int n){ElemType temp;for(int i=0;i<n-1;++i)//比较n-1趟{//int flag = 0;//标志位:一趟排序中是否发生了交换for(int j=0;j<n-i-1;++j)//第j趟排序比较n-j次(j从0开始的所以还得减-1)n-j-1{if(array[j] < array[j+1]){temp = array[j];array[j] = array[j+1];array[j+1] = temp;//flag = 1;//此趟排序中发生了交换,若未发生交换,表明已经有序}}//if(flag == 0)//一趟排序中未发生交换,说明已经有序,函数结束!//break;}}int main(){clock_t start;clock_t end;double duration;ElemType array[] = {60,50,40};int n = sizeof(array)/sizeof(array[0]);//数组元素个数start = clock();for(int i=0;i<REPEAT;++i){bubble_sort1(array,n);}end = clock();duration = (double)(end-start)/CLOCKS_PER_SEC;//函数重复执行REPEAT次所用时间printf("%6.2e\n",duration);for(i=0;i<n;++i){printf("%d\n",array[i]);}return 0;}
测试第二个函数所用时间:(不带状态标志位)
start = clock();for(int i=0;i<REPEAT;++i){bubble_sort2(array,n);}end = clock();
由执行结果可知,第一个函数执行效率高(带有状态标志位)
所以,以后写冒泡排序时,带上状态标志位!!!!
0 0
- 冒泡排序改进版
- 改进版冒泡排序
- 冒泡排序改进版
- 冒泡排序改进版
- 冒泡排序以及改进版冒泡排序
- 冒泡法排序改进版
- 冒泡排序的 改进版
- 冒泡排序及改进版
- 冒泡排序及改进(C++版)
- Code:冒泡排序初级+改进版
- 冒泡排序的改进
- 冒泡排序及其改进
- 冒泡排序的改进
- 冒泡排序改进-1
- 冒泡排序改进
- 冒泡排序及其改进
- 冒泡排序及其改进
- 冒泡排序及其改进
- mini2440硬件篇之ADC触摸屏
- C++使用SQLite步骤及示例
- 2710 Max Factor
- 如何快速给类似的变量名赋值
- Spring MVC--1(application.xml--头标)
- 改进版冒泡排序
- Android自定义系统服务与部分系统服务列表
- while loading persisted sessions: java.io.InvalidClassException: com.bp.beans.User; local class inc
- 初探oracle open初始化过程
- poj1035
- 网桥
- ARP协议详解
- 基本概念
- SHELL执行数学运算