冒泡排序和其两种优化
第一篇博客
会的算法的也不多
就用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
冒泡排序和其两种优化相关推荐
- oracle 两种优化器,Oracle的优化器有两种优化方式(一)
Oracle的优化器有两种优化方式(整理), 2010-04-13 RBO方式:基于规则的优化方式(Rule-Based Optimization,简称为RBO) 优化器在分析SQL语句时,所遵循的 ...
- 超详细的C++冒泡排序(升降)的两种实现方式
目录 1.从高位向低位的依次升序 2.从低位向高位的依次升序 3对于只要求最高位和最低位的简化方式 4降序的实现方式 5判断排序是否完成的方式 预先定义一个交换函数 int swap(int a,in ...
- 【C++ 语言】面向对象 ( 函数重载 | 运算符重载 | 运算符重载两种定义方式 | 拷贝构造方法 | RVO 优化 | NRVO 优化 )
文章目录 函数重载 运算符重载 ( 类内部定义云算符重载 ) 运算符重载 ( 类外部定义运算符重载 ) 可重载的运算符 拷贝构造方法 编译器优化 ( RVO 优化 | NRVO 优化 ) 完整代码示例 ...
- MATLAB中代码优化的两种方法
MATLAB中的代码优化 MATLAB中的代码优化有两种重要的方法:预分配组和向量化循环. 我们举一个简单的例子来看,创建一个MATLAB函数来计算f(x) = sin(x / 100π): func ...
- C语言快速排序算法及三种优化方式
C语言快速排序算法及三种优化方式 C语言快速排序算法及三种优化方式 原理 快速排序复杂度分析 1 时间复杂度 2 空间复杂度 快速排序代码实现 1 普通快速排序 2 快速排序优化1-三数取中优化不必要 ...
- C/C++冒泡排序4种优化方法
冒泡排序应该是大多数人接触的第一种排序方法,虽然它的时间复杂度为O(n^2),但是它简单易懂,代码复杂度低,所以仍有很大的用武之地.最近在总结排序算法,决定重温下冒泡排序,以及它的优化方法. 冒泡排序 ...
- 第七篇:使用 CUDA 进行计算优化的两种思路
前言 本文讨论如何使用 CUDA 对代码进行并行优化,并给出不同并行思路对均值滤波的实现. 并行优化的两种思路 思路1: global 函数 在 global 函数中创建出多个块多个线程对矩阵每个元素 ...
- mysql 查询慢 分析_MySQL优化:定位慢查询的两种方法以及使用explain分析SQL
一条SQL查询语句在经过MySQL查询优化器处理后会生成一个所谓的执行计划,这个执行计划展示了具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等. 本章的内容就 ...
- redis优化查询的两种方式
前言 一般来说,查询成为很多应用对外的性能瓶颈,其主要原因在于一旦并发量上来了,应用后台和数据库或者其他的存储服务的IO交互次数增多了,而服务器的线程资源开销是有限的,如何减少IO次数,这是优化要考虑 ...
最新文章
- Microsoft Remote Desktop移动客户端QA
- 《第一行代码》学习笔记19-广播接收器Broadcast_Receiver(2)
- linux每日命令,日常整理linux常用命令大全(收藏)
- 使用大脑活动反馈的刺激技术自动化治疗脑部疾病
- PAT甲级1003 Emergency:[C++题解]dijkstra求最短路、最短路条数
- C 库函数 - vprintf()
- Ubuntu下搭建NFS,并在开发板挂载
- react 数据库排序_如何使用React对表数据进行排序
- android thread 用法,我们如何在Android中使用runOnUiThread?
- django mysql模糊查询_Django 模糊查询
- CCF201403-3 命令行选项(100分)
- python mongodb查询速度优化_Mongodb 3 查询优化(语句优化、建索引)
- Oracle Alert sid log 位置问题
- 实验四 JSP内置对象的应用
- 文本去重方法——SimHash
- 战神引擎mud2没有mysql文件_战神引擎架设不要(MongoDB)芒果数据库配置教程
- J9数字货币科普:什么是加密借贷?有什么风险存在?
- 华为路由器接口如何区分_华为路由的线路输出的两种不同方法简介
- Linux驱动之等待队列
- Oracle-SQLLDR加载TPC-DS数据
热门文章
- 【排序算法】图解桶排序
- Java面试题:在一个递增的数组里面,找出任意两个数的和等于100,编写程序输出这些数对,可以假设数组中不存在重复元素
- Android高仿IOS和QQ的弹出对话框
- archlinux 开机自动连接wifi
- 计算机教室怎样自动批量修改ip,批量设置IP地址和计算机名
- scrapy-redis mysql_scrapy-redis 构建分布式爬虫,此片文章有问题。不要用
- idm 服务器响应显示您没有权限下载此文件_仅需10分钟,让你掌握下载神器IDM的使用技巧...
- android怎样将bar的label居中_从iPhone换成Android手机之后,将是一种怎样的不同体验...
- php reset input,PHP reset() 函数
- php使用aot,aot的常规使用