冒泡排序极其优化(c/c++版本)

简介: 冒泡排序极其优化算法步骤1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。3.针对所有的元素重复以上的步骤,除了最后一个。4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较

冒泡排序极其优化


算法步骤


1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。


2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。


3.针对所有的元素重复以上的步骤,除了最后一个。


4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较


4388bc38ca73fc17b2410a732585040.png


此图片来源网络


网络异常,图片无法展示
|
网络异常,图片无法展示
|

全部程序


//为了随机生成区间 [m,n] 之间的整数,可以用公式 rand()%(n-m+1)+m。
#include<iostream>
using namespace std;
#define N 20
int main(){
  int arry[N]={0};
  for(int i=0;i<N;i++)
    arry[i]=rand()%(100-1+1)+1;
  for (int i = 1; i <= N; i++) {
    printf("%d \t", arry[i-1]);
    if (i % 5 == 0)
      printf("\n");
  }
  /*****************冒泡排序*********************/
  int s = 0;//  当第一次完全有序时直接跳过s可以是小于0的数字
  for(int e=N-1;e>0;e--){   
    for(int b=0;b<e;b++){
      if(arry[b]<arry[b+1]){
        int tep=arry[b];
        arry[b]=arry[b+1];
        arry[b+1]=tep;
        s=b+1;//记录最后一次交换的位置(取循环下标最大值)
      }
    }
    e=s;
  }
  printf("\n排序后:\n"); 
  for (int i = 1; i <= N; i++) {
    printf("%d \t", arry[i-1]);
    if (i % 5 == 0)
      printf("\n");
  }
  getchar();
  return 0;
}


38754f8bf573433a8dae1a015662ed57.png


冒泡排序代码


for(int e=N-1;e>0;e--){       //外循环:N个数据比较N-1次
    for(int b=0;b<e;b++){   //内循环:每大循环1次就少一次比较
      if(arry[b]<arry[b+1]){
        int tep=arry[b];
        arry[b]=arry[b+1];
        arry[b+1]=tep;
      }
    }
  }


优化思路


有可能一堆数据后面已经排好序,或者循环几次后,后面的数据就是有序的。这个时候如果我们标记最后一次数据交换的位置。外循环就会减少循环的次数。注意观察下面排序的过程(绿色是在比较(交换)黄色是比较完成)


37e043cddd80a4367f4047229b6c6ee.png


此图片来源网络


冒泡排序优化核心代码


/*****************冒泡排序优化*********************/
  int s = 0;//  定义变量用来标记角标
  for(int e=N-1;e>0;e--){   
    for(int b=0;b<e;b++){
      if(arry[b]<arry[b+1]){
        int tep=arry[b];
        arry[b]=arry[b+1];
        arry[b+1]=tep;
        s=b+1;//记录最后一次交换的位置(取循环下标最大值)
            //arry[b],arry[b+1]这两个数据交换取角标较大的b+1
      }
    }
    e=s;
  }


目录
打赏
0
0
0
0
0
分享
相关文章
公司局域网管理中的哈希表查找优化 C++ 算法探究
在数字化办公环境中,公司局域网管理至关重要。哈希表作为一种高效的数据结构,通过哈希函数将关键值(如IP地址、账号)映射到数组索引,实现快速的插入、删除与查找操作。例如,在员工登录验证和设备信息管理中,哈希表能显著提升效率,避免传统线性查找的低效问题。本文以C++为例,展示了哈希表在局域网管理中的具体应用,包括设备MAC地址与IP分配的存储与查询,并探讨了优化哈希函数和扩容策略,确保网络管理高效准确。
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
104 2
【C++】CentOS环境搭建-快速升级G++版本
通过上述任一方法,您都可以在CentOS环境中高效地升级G++至所需的最新版本,进而利用C++的新特性,提升开发效率和代码质量。
345 64
【C++】CentOS环境搭建-快速升级G++版本
通过上述任一方法,您都可以在CentOS环境中高效地升级G++至所需的最新版本,进而利用C++的新特性,提升开发效率和代码质量。
367 63
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化2
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
104 6
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化1
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
143 7
Inno setup 脚本判断 Microsoft Visual C++ Redistributable 不同版本区别
Inno setup 脚本判断 Microsoft Visual C++ Redistributable 不同版本区别
|
9月前
|
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
611 2
C++一分钟之-返回值优化与Move Semantics
【6月更文挑战第19天】C++的RVO与移动语义提升效率,减少对象复制。RVO是编译器优化,避免临时对象的创建。移动语义通过右值引用和`std::move`转移资源所有权。注意RVO不是总有效,不应过度依赖。使用移动语义时,避免误用`std::move`导致对象无效。示例展示了RVO和移动构造函数的应用。理解并恰当使用这些机制能写出更高效代码。
101 3
|
9月前
|
C++
C++数组(定义、遍历、长度、地址、最大值、逆置、冒泡排序)
C++数组(定义、遍历、长度、地址、最大值、逆置、冒泡排序)
150 0

热门文章

最新文章