双向冒泡排序
来源:互联网 发布:淘宝iphone6s防水标志 编辑:程序博客网 时间:2024/05/04 03:39
普通冒泡排序就不写了,这里写出了另外一种排序方式,其实和传统的冒泡排序是一样的,唯一不同的地方是双向的,解释如下: 假如说第一次把数组的最大值移动到了数组的a[length-1]的位置,传统的方式是指针再次回到a[0]进行移动,该方式是在a[length-2]开始,将最小的值移动到最左端a[0]的位置,然后在从a[1]的位置开始,这样双向反复,直到排序完毕。这种双向冒泡排序虽然最外层的循环次数减少了,但是内层排序增多了,不过总体的效率肯定有提高。下面是自己根据网上的思路写的代码,有不对的请大神指证。
using namespace std;#define N 10typedef struct{ int key; //DataType other;}RecType;RecType R[N+1];void maopaoSort(RecType R[]){ int num=0; int fnum=0;int wnum=0; for(int i=0;i<N;i++){ bool flag = true ; for(int j=0;j<N-i-1;j++){ if(R[j].key>R[j+1].key){ flag = false; int temp = R[j].key; R[j].key = R[j+1].key; R[j+1].key = temp; // cout<<"正循环交换"<<num++<<endl; } cout<<"正循环"<<num++<<endl; }// for(int j=N-i-1;j>i;j--){// if(R[j].key<R[j-1].key){// flag = false;// int temp = R[j].key;// R[j].key = R[j-1].key;// R[j-1].key = temp;// // cout<<"反循环交换"<<num++<<endl;// }// cout<<"反循环"<<fnum++<<endl;// } cout<<"外循环"<<wnum++<<endl; if(flag) break; }}int main(int argc, const char * argv[]) { int a[10]={49,14,38,74,96,65,8,49,55,27}; for(int i=0;i<N;i++){ R[i]={a[i]}; }; maopaoSort(R); for(int i=0;i<N;i++){ cout<<R[i].key<<endl; }; return 0;}
1 0
- 双向冒泡排序法
- 双向冒泡排序法
- 双向冒泡排序算法
- 双向冒泡排序
- 双向冒泡排序
- 双向冒泡排序
- 双向冒泡排序
- java 双向冒泡排序
- 双向冒泡排序
- 冒泡双向排序
- 双向冒泡排序
- 双向冒泡排序
- 双向冒泡排序
- 双向冒泡排序
- 双向冒泡排序
- 双向冒泡排序
- 双向冒泡排序
- 双向冒泡排序
- python学习笔记一
- 2016年3月4日。
- 使用开源项目的正确姿势,都是血和泪的总结!
- Unable to determine simulator device(无法确定设备模拟器)
- Ubuntu 15.10自动挂载ext4分区
- 双向冒泡排序
- line-height 属性
- 【知识整理】浅谈移动端页面设计的门道
- BZOJ 4016 最短路径树问题 [最短路+树分治]
- Kinect for Unity检测身高方法
- 应用跳转问题(android4.2和4.4区别)
- Linux下redmine的部署
- LNMP一键安装(转自鸟哥)
- 禁止Edittext弹出软键盘并且使光标正常显示