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行)。

最新文章

  1. Lead推荐学asp.net书籍
  2. php学习笔记:文件的上传(包含设置文件的上传大小限制)
  3. Redis和Memcache对比及选择
  4. Jni的一个异常
  5. C# Java 3DES加密解密 扩展及修正\0 问题
  6. 启动级别:init 0,1,2,3,4,5,6
  7. Modularity模块化
  8. 10 Technologies That will Shape Future Education--reference
  9. SQL Server系统表sysobjects介绍与使用(转)
  10. poj 2305(指定进制,大数取模)
  11. BZOJ 1637: [Usaco2007 Mar]Balanced Lineup( sort + 前缀和 )
  12. 【LeetCode】Binary Tree Level Order Traversal 【BFS】
  13. Odwiedziny[POI 2015]
  14. kmalloc、vmalloc、__get_free_pages()的区别
  15. 把一个syn报文给rst掉
  16. python3 读取文件跳过文件第一行内容
  17. C#TreeView节点选中后失去焦点时改变节点背景色
  18. 20165227 实验二《Java面向对象程序设计》实验报告
  19. LNMP zabbix安装
  20. umount 强制卸载

热门文章

  1. wpf 查找指定类型的子元素
  2. uniapp安卓本地文件读取(html5+)
  3. Fortran笔记 派生类型-整理版
  4. clickhouse杂记
  5. 好用的天气插件www.tianqi.com/plugin/
  6. tapdata问题
  7. Oracle 存储过程4:PL/SQL动态执行DDL语句
  8. axios与ajax的优缺点
  9. RestTemplate 连接池最大链接数
  10. Vue后台管理项目中解决需要配置多个端口号问题