1 // g++ bubble_sort.cc -Wall -O3 && ./a.exe
2
3
4 #include <iostream>
5 #include <vector>
6
7
8 static void swap(int &a, int &b) {
9 b = a + b;
10 a = b - a;
11 b = b - a;
12 }
13
14 static void BubbleSort(std::vector<int> &arr) {
15 for (size_t i = 0; i < arr.size(); ++i) {
16 for (size_t j = 0; j < arr.size() - i - 1; ++j) {
17 if (arr[j] > arr[j + 1]) {
18 swap(arr[j], arr[j + 1]);
19 } // else nothing
20 }
21 }
22 }
23
24 int main(int argc, char const *argv[]) {
25 std::vector<int> v {
26 6, 8, 9, 8, 7, 6, 5, 2, 0, -1
27 };
28
29 (void)BubbleSort(v);
30 for (int i: v) {
31 std::cout << i << "\t";
32 }
33 std::cout << "\n";
34
35 return 0;
36 }

冒泡排序的递归实现如下:

 1 // g++ bubble_sort.cc -Wall -O3 && ./a.exe
2
3
4 #include <iostream>
5 #include <vector>
6
7
8 static void swap(int &a, int &b) {
9 b = a + b;
10 a = b - a;
11 b = b - a;
12 }
13
14 static void BubbleSortRecursive(std::vector<int> &arr, size_t end) {
15 if (end <= 0) {
16 std::cout << "End procession.\n";
17 return;
18 }
19
20 for (size_t j = 0; j < end; ++j) {
21 if (arr[j] > arr[j + 1]) {
22 swap(arr[j], arr[j + 1]);
23 } // else nothing
24 }
25
26 return BubbleSortRecursive(arr, end - 1);
27 }
28
29 int main(int argc, char const *argv[]) {
30 std::vector<int> v {
31 6, 8, 9, 8, 7, 6, 5, 2, 0, -1
32 };
33
34 (void)BubbleSortRecursive(v, v.size() - 1);
35 for (int i: v) {
36 std::cout << i << "\t";
37 }
38 std::cout << "\n";
39
40 return 0;
41 }

和非递归方式相比,只是修改了:① 终止条件(15-18行);② 将内循环提了出来(20-24行)。

BubbleSort,冒泡排序,C++非递归和递归实现的更多相关文章

  1. C中二叉排序树的非递归和递归插入操作以及中序遍历代码实现【可运行】

    C中二叉排序树的非递归和递归插入操作以及中序遍历代码实现[可运行] #include <stdio.h> #include <stdlib.h> typedef int Key ...

  2. Java基础知识强化之IO流笔记12:递归之递归解决问题的思想(图解)

    1. 使用递归计算5!的结果,递归思想的本质如下: 2. 下面就要使用代码实现这个递归: 递归实现分析: (1)做递归要写一个方法 (2)出口条件 (3)规律 代码实现如下: package com. ...

  3. Java遍历文件夹的两种方法(非递归和递归)

    import java.io.File; import java.util.LinkedList; public class FileSystem {    public static int num ...

  4. C++实现斐波那契第N项非递归与递归实现的时间比较

    /* * 斐波那契数列.cpp * * Created on: 2018年4月9日 * Author: soyo */ #include<iostream> #include<cti ...

  5. 非递归和递归分别实现求第n个斐波那契数。

    菲波那切数列为:0 1 1 2 3 5 8 13 21 34... 规律:从第三个数字起后面的每一个数字都是前两个数字的和. 非递归算法: #include<stdio.h> int ma ...

  6. 用Python计算幂的两种方法,非递归和递归法

    用Python计算幂的两种方法: #coding:utf-8 #计算幂的两种方法.py #1.常规方法利用函数 #不使用递归计算幂的方法 """ def power(x, ...

  7. [速记]关于指针,引用和递归和解递归——C++

    在写基于二叉排序树的查找时,分为三个过程 1.二叉排序树的插入 2.二叉排序树的建立 3.基于二叉排序树的查找 其中第三部可以递归方式实现,也可以用while循环解递归,于是我想也解解第一步的递归,看 ...

  8. Java基础知识强化之IO流笔记11:递归之递归概述和注意事项

    1. 递归: 方法定义中调用方法本身的现象. e.g: public void show(int n ) { if(n <= 0) { System.exit(0); } System.out. ...

  9. recursion 递归以及递归的缺点

    递归定义的算法有两部分: 递归基:直接定义最简单情况下的函数值: 递归步:通过较为简单情况下的函数值定义一般情况下的函数值. 应用条件与准则: (1)问题具有某种可借用的类同自身的子问题描述的性质: ...

  10. POJ2718 递归套递归

    就是给你一个数,排列组合,然后问如何排列之间的差值最小. 我之前的想法是一个递归,然后两个for循环枚举L1和L2,结果TLE了,然后想了一下剪枝发现没办法剪,然后看了一下别人的代码,用了next_p ...

随机推荐

  1. 异步串口通信协议--UART

    UART(通用异步收发传输器)将由计算机内部传送过来的并行数据转换为输出的串行数据流.将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用. 在输出的串行数据流中加入奇偶校验位,并对 ...

  2. win/ubuntu/centos 安装后台监控工具btop

    之前linux平台进行后台监控一直是简单的看top,但界面太难看而且需要记的缩写太多而且不直观(对于我来说),后面有尝试替换htop,扩展支持了鼠标操作以及直观监控,但是界面还是难看,今天查找了一下发 ...

  3. proguard-maven-plugin混淆代码排除方法

    当使用proguard-maven-plugin混淆代码时,如果要排除某个类中某个方法不混淆,务必参数指定全路径类名,否则会不生效.

  4. redis-RedisTemplate.opsForValue 常用方法

    16.multiSetIfAbsent(Map<? extends K,? extends V> map) 如果对应的map集合名称不存在,则添加,如果存在则不做修改. Map value ...

  5. el-table更新数据页面闪烁问题

    情况是这样,渲染了一个table,高度是固定的.所以会有滚动.其中的某一列的数据只显示了部分内容,鼠标浮上加载全部,用el-popover浮框显示. 但每次改变tableKey会触发整个table的重 ...

  6. 吴恩达老师机器学习课程chapter09——异常检测

    吴恩达老师机器学习课程chapter09--异常检测 本文是非计算机专业新手的自学笔记,高手勿喷. 本文仅作速查备忘之用,对应吴恩达(AndrewNg)老师的机器学期课程第十五章. 目录 吴恩达老师机 ...

  7. HTML学习笔记5----属性

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  8. WC2023 游记

    不是很会写游记,随便写写吧. 一些附件 讲课资料合集(压缩后 \(\rm 31MB\))太大了,可以去 U 群下载. 由于后面很多乐子,我把相关内容打包成 zip 上传上来了. 乐子合集下载链接.(这 ...

  9. Harbor离线安装

    一.安装docker-compose 1-1. #安装方式一 curl -SL https://github.com/docker/compose/releases/download/v2.11.2/ ...

  10. mybatis核心配置文件—设置别名typeAliases

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC & ...