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 ...
随机推荐
- git命令,回滚上一个版本,回滚n个版本,撤销回滚
1 回滚到上一个版本 git checkout . :add之前的回滚 git reset --hard:add之后,commit之前 git reset --hard origin/test:com ...
- 【运维】通过gotty实现网页代理访问服务器及K8S容器操作实践
Gotty 是Golang编写的可以方便的共享系统终端为web应用,是一个灵活强大的通过web访问终端的工具.本文将主要通过搭建Gotty实现对K8S容器的访问操作,开发如果想要正常的进行容器访问以及 ...
- luna lunatic
Luna是罗马神话的月神.英语中Lunacy.Lunatic等意指疯狂的字语源均来自Luna.月亮的阴晴圆缺影响地球的潮汐涨退甚至生物周期,故此古时的人们相信月亮拥有使人疯狂的魔力,人狼等传说亦是因此 ...
- c函数调用过程
一.内存结构内存大致可以分为四个部分:代码段,静态存储区,堆,栈.具体划分如下图所示: 栈:在执行函数时,函数内部局部变量的存储单元都可以在栈上创建,函数执行结束后会自动释放内存.栈内存的分配运算内置 ...
- Qt开发环境的建立
在建立开发环境之前,先来了解一下Qt是什么以及它的历史变迁.Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序, ...
- 自定义类型与Qt元对象系统
个人发现一篇关于在Qt中使用元对象系统支持自定义类型的好博文,记录下防止丢失(如有侵权,烦请告知删除).博文原地址:http://qtdebug.com/qtbook-misc-qvariant/ Q ...
- eclipse的快捷键都有哪些
非常实用的快捷键 Ctrl+D: 删除当前行 Ctrl+Alt+↓: 复制当前行到下一行 Ctrl+Alt+↑: 复制当前行到上一行 Alt+↓: 当前行和下面一行交互位置 Alt+↑: 当前行和上面 ...
- adb 测试常用命令
adb 环境安装并配置环境变量 常用命令汇总: 1.查看电脑已经连接的手机设备 adb devices 2.通过logcat日志获取应用APP入口 mac/linux:adb logcat Activ ...
- 用Docker-Compose一分钟搭建Wordpress博客系统
环境: CentOS 7.5 Docker 20.10.2 Docker-Compose 1.25.5 [root@localhost ~]# cat /etc/redhat-release Cent ...
- pgsql临时表
with ete as ( SELECT * from table_name ) SELECT * from ete