BubbleSort,冒泡排序,C++非递归和递归实现
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++非递归和递归实现的更多相关文章
- C中二叉排序树的非递归和递归插入操作以及中序遍历代码实现【可运行】
C中二叉排序树的非递归和递归插入操作以及中序遍历代码实现[可运行] #include <stdio.h> #include <stdlib.h> typedef int Key ...
- Java基础知识强化之IO流笔记12:递归之递归解决问题的思想(图解)
1. 使用递归计算5!的结果,递归思想的本质如下: 2. 下面就要使用代码实现这个递归: 递归实现分析: (1)做递归要写一个方法 (2)出口条件 (3)规律 代码实现如下: package com. ...
- Java遍历文件夹的两种方法(非递归和递归)
import java.io.File; import java.util.LinkedList; public class FileSystem { public static int num ...
- C++实现斐波那契第N项非递归与递归实现的时间比较
/* * 斐波那契数列.cpp * * Created on: 2018年4月9日 * Author: soyo */ #include<iostream> #include<cti ...
- 非递归和递归分别实现求第n个斐波那契数。
菲波那切数列为:0 1 1 2 3 5 8 13 21 34... 规律:从第三个数字起后面的每一个数字都是前两个数字的和. 非递归算法: #include<stdio.h> int ma ...
- 用Python计算幂的两种方法,非递归和递归法
用Python计算幂的两种方法: #coding:utf-8 #计算幂的两种方法.py #1.常规方法利用函数 #不使用递归计算幂的方法 """ def power(x, ...
- [速记]关于指针,引用和递归和解递归——C++
在写基于二叉排序树的查找时,分为三个过程 1.二叉排序树的插入 2.二叉排序树的建立 3.基于二叉排序树的查找 其中第三部可以递归方式实现,也可以用while循环解递归,于是我想也解解第一步的递归,看 ...
- Java基础知识强化之IO流笔记11:递归之递归概述和注意事项
1. 递归: 方法定义中调用方法本身的现象. e.g: public void show(int n ) { if(n <= 0) { System.exit(0); } System.out. ...
- recursion 递归以及递归的缺点
递归定义的算法有两部分: 递归基:直接定义最简单情况下的函数值: 递归步:通过较为简单情况下的函数值定义一般情况下的函数值. 应用条件与准则: (1)问题具有某种可借用的类同自身的子问题描述的性质: ...
- POJ2718 递归套递归
就是给你一个数,排列组合,然后问如何排列之间的差值最小. 我之前的想法是一个递归,然后两个for循环枚举L1和L2,结果TLE了,然后想了一下剪枝发现没办法剪,然后看了一下别人的代码,用了next_p ...
随机推荐
- vuex中的state、mutations 、actions 、getters四大属性如何使用
一.state (提供唯一的公共数据源) 方式1 在div中,$store.state.count 方式2 import {mapState} from 'vuex' computed:{ -mapS ...
- c基础语法-常用关键字
变量 在计算机中,整数是以补码形式存放的.所以如果整数的最高位是1,有符号数的话就是负数:如果是无符号数,则都表示正数 整形 int ->32 -2^31~2^31无符号整形 unsigned ...
- 执行celery --version报错
python 3.7.4安装celery后执行celery --version报错 安装命令: pip install celery -i https://pypi.douban.com/simple ...
- linux部署带ssl的nginx
1.前期准备 1.1:下载nginx-1.18.0版本 http://nginx.org/download/nginx-1.18.0.tar.gz 然后上传到服 务器 /usr/local ...
- bottle库上传文件
安装bottle库 pip install bottle 上传代码 import bottle @bottle.get('/upload') def upload_get(): return bott ...
- Win10家庭版安装docker desktop
1.开启Hyper-V在桌面新建hyperv.cmd文件,内容如下: pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*H ...
- C++11 mutex unique_lock condition_variable 互斥锁 条件变量
创建项目再进行测试比较麻烦,可以使用这个在线编译器进行验证,快速方便 C++11在线编译器 mutex是互斥锁,互斥量 condition_variable是条件变量 std::mutex m; vo ...
- 实践:带您用多种姿势将存储在腾讯云COS 上的视频播放
导语 随着5G时代的到来,短视频/直播行业开始流行,音视频逐渐成为信息传播中流量占比最大的部分.腾讯云对象存储(COS)作为可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务,早已不 ...
- Oracle ASM磁盘组的常用操作
1.查看现有磁盘组信息 select group_number gno,name,state,type,total_mb,free_mb,required_mirror_free_mb rmfmb,u ...
- Unity 复杂Json 解析
最近项目需要, 搞了一串嵌套非常多的Json 用LitJson读取体验不太好,上网查了一下发现NetwtonsoftJson ,十分好用 一句代码就可以了 JObject data = JsonCon ...