冒泡排序、选择排序
来源:互联网 发布:数据集成技术 编辑:程序博客网 时间:2024/04/29 21:20
一、冒泡排序
算法思想:
从左到右扫描数据,找出最大的元素,将其放到数组右边,循环比较相邻的两个数,如果左边的数比右边的大,则交换两个数;
template <typename Type> void bubbleSort(Type *begin, Type *end) { if ((begin == end) || (begin == NULL) || (end == NULL)) return ; int length = end - begin; //注意点(1):保证一旦数组有序, 则会直接停止排序, 不会在继续进行无用的循环 bool isOrder = false; //外层循环控制扫描次数(length-1) //注意点(2):N个元素其实只需N-1次扫描 for (int i = 0; !isOrder && i < length-1; ++i) { //首先假定这次数组已经有序 isOrder = true; //注意点(3):确保能够从0扫描到最后一个未排序的元素 for (Type *iter = begin; iter < end-i-1; ++iter) { //如果前面的左边的元素>右边的元素 if (*iter > *(iter+1)) { //交换 std::swap(*iter, *(iter+1)); isOrder = false; } } } } template <typename Type> void bubbleSort(Type *array, int length) { return bubbleSort(array, array+length); }
二、选择排序
思想:从当前尚未排序的序列中选择一个最小的元素,将之放到已排序的序列的队列的末尾;
template <typename Type> void selectSort(Type *begin, Type *end) { if ((begin == end) || (begin == NULL) || (end == NULL)) return ; //只要循环到最后一个元素的前一个就行了,因为剩下的那个肯定是最大的 for (Type *outer = begin; outer < end-1; ++outer) { //注意:是从尚未排序的序列中查找(miner = outer, inner = outer+1) Type *miner = outer; //从miner+1开始遍历数组, 寻找一个元素值小于*miner的 for (Type *inner = outer+1; inner < end; ++inner) { if (*inner < *miner) miner = inner; } if (miner != outer) std::swap(*miner, *outer); } } //为了能够让STL的标准容器如vector使用 template <typename Iterator> void selectSort(Iterator iter1, Iterator iter2) { return selectSort(&(*iter1), &(*iter2)); } template <typename Type> void selectSort(Type *array, int length) { return selectSort(array, array+length);
0 0
- 冒泡排序 选择排序
- 冒泡排序、选择排序
- 冒泡排序 选择排序
- 选择排序 冒泡排序
- 冒泡排序/选择排序
- 冒泡排序/选择排序
- 冒泡排序 选择排序
- 选择排序冒泡排序
- 选择排序 冒泡排序
- 冒泡排序、选择排序
- 冒泡排序,选择排序
- 选择排序-【冒泡排序】
- 冒泡排序,选择排序
- 选择排序&冒泡排序
- 冒泡排序选择排序
- 选择排序,冒泡排序
- 冒泡排序&选择排序
- 冒泡排序、选择排序
- IoC容器和 Dependency Injection模式 Inversion of Control Containers and the Dependency Injection pattern
- 控制台界面控制(七):移动文本
- JAVA访问数据库之增删改查(CRUD)
- 网络唤醒无需任何软件 实现局域网广域网远程唤醒计算机
- 双击打开某张表的时候很慢的解决办法
- 冒泡排序、选择排序
- Hibernate注释大全
- 控制台界面控制(八):光标设置
- Linux下的makefile相关内容
- Apache+mod_cluster+jboss EAP5.1搭建详解
- 【自用】线段树 区间最小值
- 反应器模式
- 控制台界面控制(九):读取键盘操作
- 欢迎使用CSDN-markdown编辑器