第一篇博客

会的算法的也不多

就用c++写个冒泡排序

#include <iostream>
#include <iomanip>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <ctime>
using namespace std;#define random(x,y)     (rand()%(y-x)+x)
/*srand((int)time(0));//随机数种子*/
#define length(a)   (sizeof(a)/sizeof(a[0]))int main(){srand((int)time(0));int count=0;int s = 10;int array[s];int array1[s];int array2[s];memset(array,0,sizeof(array));memset(array1,0,sizeof(array1));memset(array2,0,sizeof(array2));cout<<"排序前:"; for(int i = 0;i<length(array);i++){array[i] = random(1,100);cout<<setw(4)<<array[i];}memcpy(array1, array,sizeof(array));memcpy(array2, array,sizeof(array));//冒泡排序 for(int i = 0;i<length(array)-1;i++){for(int j = 0;j<(length(array)-1)-i;j++){if(array[j]>array[j+1]){//按从小到大排列 swap(array[j],array[j+1]); }   count++;          }   } cout<<endl<<"排序后:"; for(int i = 0;i<length(array);i++){cout<<setw(4)<<array[i];}cout<<endl<<"循环次数:"<<count<<endl; //优化-1 count = 0;cout<<"排序前:"; for(int i = 0;i<length(array1);i++){cout<<setw(4)<<array1[i];}//冒泡排序 for(int i = 0;i<length(array1)-1;i++){int flag = 0; //设置一个标志位 for(int j = 0;j<(length(array1)-1)-i;j++){if(array1[j]>array1[j+1]){//按从小到大排列 swap(array1[j],array1[j+1]);flag = 1;  }count++;              }if(flag==0) break;//内层循环没有改变标志位则表示数组已 排序完成,提前跳出循环 } cout<<endl<<"排序后:"; for(int i = 0;i<length(array1);i++){cout<<setw(4)<<array1[i];}cout<<endl<<"循环次数:"<<count<<endl; //优化-2count = 0;cout<<"排序前:"; for(int i = 0;i<length(array2);i++){cout<<setw(4)<<array2[i];}//冒泡排序 int flag;int pos;int posflag = length(array2)-1;for(int i = 0;i<length(array2)-1;i++){flag = 0; //设置一个标志位 pos=0;for(int j = 0;j<posflag;j++){if(array2[j]>array2[j+1]){//按从小到大排列 swap(array2[j],array2[j+1]);flag = 1;  pos = j;//记录每次大循环置换的最后一个数组的的下标}count++;              }if(flag==0)break;//内层循环没有改变标志位则表示数组已排序完成,提前跳出循环 posflag = pos;} cout<<endl<<"排序后:"; for(int i = 0;i<length(array2);i++){cout<<setw(4)<<array2[i];}cout<<endl<<"循环次数:"<<count<<endl;  return 0;
}

两种优化能减少    [     0    ,    n(n-1)/2-n    )  次循环,

都是不必要的循环

转载于:https://www.cnblogs.com/pug-/p/10651242.html

冒泡排序和其两种优化相关推荐

  1. oracle 两种优化器,Oracle的优化器有两种优化方式(一)

    Oracle的优化器有两种优化方式(整理), 2010-04-13 RBO方式:基于规则的优化方式(Rule-Based Optimization,简称为RBO)  优化器在分析SQL语句时,所遵循的 ...

  2. 超详细的C++冒泡排序(升降)的两种实现方式

    目录 1.从高位向低位的依次升序 2.从低位向高位的依次升序 3对于只要求最高位和最低位的简化方式 4降序的实现方式 5判断排序是否完成的方式 预先定义一个交换函数 int swap(int a,in ...

  3. 【C++ 语言】面向对象 ( 函数重载 | 运算符重载 | 运算符重载两种定义方式 | 拷贝构造方法 | RVO 优化 | NRVO 优化 )

    文章目录 函数重载 运算符重载 ( 类内部定义云算符重载 ) 运算符重载 ( 类外部定义运算符重载 ) 可重载的运算符 拷贝构造方法 编译器优化 ( RVO 优化 | NRVO 优化 ) 完整代码示例 ...

  4. MATLAB中代码优化的两种方法

    MATLAB中的代码优化 MATLAB中的代码优化有两种重要的方法:预分配组和向量化循环. 我们举一个简单的例子来看,创建一个MATLAB函数来计算f(x) = sin(x / 100π): func ...

  5. C语言快速排序算法及三种优化方式

    C语言快速排序算法及三种优化方式 C语言快速排序算法及三种优化方式 原理 快速排序复杂度分析 1 时间复杂度 2 空间复杂度 快速排序代码实现 1 普通快速排序 2 快速排序优化1-三数取中优化不必要 ...

  6. C/C++冒泡排序4种优化方法

    冒泡排序应该是大多数人接触的第一种排序方法,虽然它的时间复杂度为O(n^2),但是它简单易懂,代码复杂度低,所以仍有很大的用武之地.最近在总结排序算法,决定重温下冒泡排序,以及它的优化方法. 冒泡排序 ...

  7. 第七篇:使用 CUDA 进行计算优化的两种思路

    前言 本文讨论如何使用 CUDA 对代码进行并行优化,并给出不同并行思路对均值滤波的实现. 并行优化的两种思路 思路1: global 函数 在 global 函数中创建出多个块多个线程对矩阵每个元素 ...

  8. mysql 查询慢 分析_MySQL优化:定位慢查询的两种方法以及使用explain分析SQL

    一条SQL查询语句在经过MySQL查询优化器处理后会生成一个所谓的执行计划,这个执行计划展示了具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等. 本章的内容就 ...

  9. redis优化查询的两种方式

    前言 一般来说,查询成为很多应用对外的性能瓶颈,其主要原因在于一旦并发量上来了,应用后台和数据库或者其他的存储服务的IO交互次数增多了,而服务器的线程资源开销是有限的,如何减少IO次数,这是优化要考虑 ...

最新文章

  1. Microsoft Remote Desktop移动客户端QA
  2. 《第一行代码》学习笔记19-广播接收器Broadcast_Receiver(2)
  3. linux每日命令,日常整理linux常用命令大全(收藏)
  4. 使用大脑活动反馈的刺激技术自动化治疗脑部疾病
  5. PAT甲级1003 Emergency:[C++题解]dijkstra求最短路、最短路条数
  6. C 库函数 - vprintf()
  7. Ubuntu下搭建NFS,并在开发板挂载
  8. react 数据库排序_如何使用React对表数据进行排序
  9. android thread 用法,我们如何在Android中使用runOnUiThread?
  10. django mysql模糊查询_Django 模糊查询
  11. CCF201403-3 命令行选项(100分)
  12. python mongodb查询速度优化_Mongodb 3 查询优化(语句优化、建索引)
  13. Oracle Alert sid log 位置问题
  14. 实验四 JSP内置对象的应用
  15. 文本去重方法——SimHash
  16. 战神引擎mud2没有mysql文件_战神引擎架设不要(MongoDB)芒果数据库配置教程
  17. J9数字货币科普:什么是加密借贷?有什么风险存在?
  18. 华为路由器接口如何区分_华为路由的线路输出的两种不同方法简介
  19. Linux驱动之等待队列
  20. Oracle-SQLLDR加载TPC-DS数据

热门文章

  1. 【排序算法】图解桶排序
  2. Java面试题:在一个递增的数组里面,找出任意两个数的和等于100,编写程序输出这些数对,可以假设数组中不存在重复元素
  3. Android高仿IOS和QQ的弹出对话框
  4. archlinux 开机自动连接wifi
  5. 计算机教室怎样自动批量修改ip,批量设置IP地址和计算机名
  6. scrapy-redis mysql_scrapy-redis 构建分布式爬虫,此片文章有问题。不要用
  7. idm 服务器响应显示您没有权限下载此文件_仅需10分钟,让你掌握下载神器IDM的使用技巧...
  8. android怎样将bar的label居中_从iPhone换成Android手机之后,将是一种怎样的不同体验...
  9. php reset input,PHP reset() 函数
  10. php使用aot,aot的常规使用