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. Idea Diff工具介绍

    背景 项目中有大量的数据对比工作,需要生成文件,与旧文件进行对比,自动化对比和手工对比验证,自动化对比采用java-diff工具类或者手动去除换行空格注释,进行字符串对比,手动化对比可以采用git d ...

  2. SQLSERVER判断是否为数字ISNUMERIC

    从SQLSERVER 2005新增isnumeric函数,返回1则字符串是数值,返回0则认为不是数值 但里面有些其他的字符也返回1,不知道是怎么个思路,是不是花旗国的规则? SELECT ISNUME ...

  3. qt 运行环境配置

    注意事项: 1 在设备上进行如下配置 root@am335x-pico:/opt# export QTDIR=/opt/qt-4.6.2-arm root@am335x-pico:/opt# expo ...

  4. 初次安装虚拟机和Linux

    --初学Linux记录点滴 使用软件 VMware-Workstation-15.0.4 CentOS-7-x86_64-Minimal-2003.iso 1.首先使用 VMware-Workstat ...

  5. 《Python深度学习》《卷积神经网络的可视化》精读

    对于大多数深度学习模型,模型学到的表示都难以用人类可以理解的方式提取和呈现.但对于卷积神经网络来说,我们可以很容易第提取模型学习到的表示形式,并以此加深对卷积神经网络模型运作原理的理解. 这篇文章的内 ...

  6. A表某字段==B表某字段 更新A表的数据

    update mls_supplytask t1 -- 供应商认证任务 JOIN mls_sup_cert_report t2 -- 供应商认证报告 on t1.id = t2.certTaskId ...

  7. 邮件合并 :处理ACCESS中批量查询语句的运行

    利用邮件合并,制作批量查询语句,一条一条的复制粘贴并运行. 有点笨但是想不出什么好办法,除非用模块的过程,但还是要手动输入参数.http://www.docin.com/p-695725657.htm ...

  8. C++ 11 std::mem_fn

    mem_fn 想到member function 成员函数 这还真就是用来调用成员函数的 普通的函数我们通过函数指针可以调用,但对于成员函数的调用稍微复杂一点,需要对象,也即this指针 因为成员函数 ...

  9. 01、kafka常用命令

    001.kafka版本 kafka_2.13-3.0.0 kafka_2.12-2.8.0 002.模拟给topic名称是 yikuang 的发一条数据(hello world) ./kafka-co ...

  10. oracle查看归档信息

    1.查看归档信息 show parameter recovery_file_dest #查看归档目录 show parameter recovery_file_dest_size #查看归档可以存储的 ...