首页 > 编程语言 >冒泡排序(简单C++实现)

冒泡排序(简单C++实现)

时间:2023-03-08 16:58:16浏览次数:40  
标签:arr 21 23 int 28 C++ 65 简单 冒泡排序

实现代码如下:

// bubble_sort.cpp
#include <stdio.h>

void printArray(int arr[], int len);

// 冒泡排序:最多进行n-1次排序
int main() {
    int arr[] = {23,39,65,28,5,3,34,75,21};
    int arrLen = sizeof(arr) / sizeof(arr[0]);
    int temp;
    for (int i = 0; i < arrLen - 1; i++) {
        for (int j = 0; j < arrLen - i - 1; j++) {
            if (arr[j] > arr[j+1]) {
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
        printf("这是第%d次排序", i);
        printArray(arr,arrLen);
    }
    return 0;
}

void printArray(int arr[], int length) {
    for (int i = 0; i < length; i++) {
        printf("%d,",arr[i]);
    }
    printf("\n");
}

这个代码的时间复杂度为O(\(n^2\))
运算结果为

C:\1\C++\bubble_sort\cmake-build-debug\bubble_sort.exe
这是第0次排序23,39,28,5,3,34,65,21,75,
这是第1次排序23,28,5,3,34,39,21,65,75,
这是第2次排序23,5,3,28,34,21,39,65,75,
这是第3次排序5,3,23,28,21,34,39,65,75,
这是第4次排序3,5,23,21,28,34,39,65,75,
这是第5次排序3,5,21,23,28,34,39,65,75,
这是第6次排序3,5,21,23,28,34,39,65,75,
这是第7次排序3,5,21,23,28,34,39,65,75,

进程已结束,退出代码为 0

可以看到第7次排序都是不必要的
修改代码
加入flag

// bubble_sort.cpp
#include <stdio.h>

void printArray(int arr[], int len);

int main() {
    int arr[] = {23,39,65,28,5,3,34,75,21};
    int arrLen = sizeof(arr) / sizeof(arr[0]);
    int temp, flag;
    for (int i = 0; i < arrLen - 1; i++) {
        flag = 0;
        for (int j = 0; j < arrLen - i - 1; j++) {
            if (arr[j] > arr[j+1]) {
                flag = 1;
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
        printf("这是第%d次排序", i);
        printArray(arr,arrLen);
        if (flag == 0) {// 若一次外层循环中都不交换(已经排好序了),则退出循环
            break;
        }
    }
    return 0;
}

void printArray(int arr[], int length) {
    for (int i = 0; i < length; i++) {
        printf("%d,",arr[i]);
    }
    printf("\n");
}

标签:arr,21,23,int,28,C++,65,简单,冒泡排序
From: https://www.cnblogs.com/succodes/p/17192607.html

相关文章

  • pdf.js 企业微信浏览器无法打开及简单使用
     1.官网地址http://mozilla.github.io/pdf.js/getting_started/2.下载旧版本   3.复制到项目地址中使用<a>标签<ahref="../content/pdfjs-3.4.120-dist/web......
  • C/C++库和头文件的查找顺序
    环境说明ubuntu18.04gcc7.5.0必要性不会有人没遇到过collect2.exe:error:ldreturned1exitstatus吧,对于我这样的C++新手,安装第三方库都不知道头文件和库文......
  • STL:map映照容器的简单用法(poj 2503 Babelfish)
    STL中map映照容器由一个键值和一个映照数据组成,具有一一对应的关系。结构为:键值--映照数据       例: aaa --111             bbb--222   ......
  • C/C++编译器构成
    C/C++编译器构成C/C++编译器有4个基本组成部分:预处理器、编译器、汇编器和链接器,它们功能大致如下:一般我们说编译器是指整套工具链,与其中一个组成部分重名。预处理......
  • C++ 性能反向优化——用哈希表消除if else导致的性能降低。
    从代码整洁的角度考虑,对于不同的值将调用相同参数的不同函数,我们通常可以通过建立从值到对应函数指针的哈希表,从而将ifelse消除。但实际可能使性能更低,以下是测试例子。......
  • C++ 基础
    基础程序语言分为低级语言(机器语言、汇编语言)中级语言高级语言(C、C++等)。C++语言的主要特点兼容C语言面向对象(继承和多态)引进了类和对象的概念C++的基本......
  • C++自定义比较函数的bug
    autocmp=[](intx,inty){returntrue;};priority_queue<int,vector<int>,cmp>q;报错第三个参数失配,需要一个类型,而不是对象。平时用sort直接传cmp习惯了,才发......
  • ℬ悟透C++┇Puzzle记录
    C++Puzzles★1.有如下代码,问:ptr指向了谁?能通过ptr调用Derived类重写的函数吗(即多态还起作用吗)?dynamic_cast到底是什么作用?ptr2与ptr性质是一样的吗?Derived*derived=ne......
  • 大数科学计算器 C++
    大数计算器目录大数计算器优点实现思路自定义类MyNum类★★★Method类具体函数实现MyNum类的函数构造&三大函数数学函数转换函数运算符重载显示函数Method类的函数构......
  • instanceof简单介绍
    官方说明是:判断左边的对象是不是右边对象类的实例   意思是说条件操作数类型int和int不兼容   instanceof左边不能是基本类型,需要是引用类型publicclass......