C++.将十个整数从小到大顺序排序(冒泡排序法+反向冒泡排序)
2021/10/24 14:09:38
本文主要是介绍C++.将十个整数从小到大顺序排序(冒泡排序法+反向冒泡排序),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
先说一下冒泡排序法的思路 若n个整数则需要进行n-1轮
每轮:将两个相邻元素进行对比 若左大于右则交换 第一轮需要比较n-1次 第二轮n-2次
每轮结束后 最大的元素就会去到最右边 第二轮倒数第二大就会去到最右边
所以 见代码:
int main() { const int n = 10; void select_sort(int *p,int n); int arr[n] = { -2,122,34,654,4364,32,54,4,65,0 }; select_sort(arr, n); cout << "The sorted array:" << endl; for (int i = 0; i < 10; i++) { cout << arr[i] << " "; } return 0; } 冒泡排序法 共排序n-1次 第一次比较n-1次 第二次n-2次 最终要从小到大排列 void select_sort(int *p, int n) { for (int i = 0; i < n-1; i++) // 一共多少轮 { for (int j = 0; j < n-1-i; j++) //一轮的内部比较 { if (p[j]>p[j+1]) //若左边大于右边 则左右交换 { int tmp = p[j]; p[j] = p[j + 1]; p[j + 1] = tmp; } } } }
这个就是冒泡排序法 即起泡排序法 每轮结束后最大的去到最右边
下面有另一版本 这个是把最小的往左调 且效率比上面的高
int main() { const int n = 10; void select_sort(int *p,int n); int arr[n] = { -2,122,34,654,4364,32,54,4,65,0 }; select_sort(arr, n); cout << "The sorted array:" << endl; for (int i = 0; i < 10; i++) { cout << arr[i] << " "; } return 0; } void select_sort(int* p, int n) { int i, j, k, t; for (i = 0; i < n - 1; i++) { k = i; for (j = i + 1; j < n; j++) { if (*(p + j) < *(p + k)) k = j; } t = *(p + k); *(p + k) = *(p + i); *(p + i) = t; } }
这个可能稍微有点难理解 这个k的引用有什么用呢
最开始i储存的第一个元素 这时候k即第一个元素 j从第二个开始 下面if语句 若右边小于左边 则k变为储存那个右边较小的值 一直比下去 最后k储存的是整个数组中最小的元素 把这个最小的和i即那个开始的元素交换 就把最小的元素换至开头了 这个k的引用 和上面那个的区别就是 这里k只是储存那个最小的元素的序号 不会立刻进行交换 而上面冒泡排序法是只要比较右边小于左边 就进行交换 效率更高
这篇关于C++.将十个整数从小到大顺序排序(冒泡排序法+反向冒泡排序)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享