夕拾-数据结构-冒泡排序
2015-09-30 22:54
218 查看
冒泡排序亦算得上比较经典的排序(快速排序就是其演进)
以小元素上浮为例:
序列从后往前扫描,若当前元素小于前一个元素则交互位置。一次遍历后,最小的元素则浮了上来、
下次只需扫描除该元素的序列即可,循环n-1次即可得有序序列
同理,我们可以让大元素下沉
使用二者的结合:双向起泡,小的上浮的同时,大的下沉
以小元素上浮为例:
序列从后往前扫描,若当前元素小于前一个元素则交互位置。一次遍历后,最小的元素则浮了上来、
下次只需扫描除该元素的序列即可,循环n-1次即可得有序序列
void BublbeUp(int a[],int n) { for(int i=0;i<n-1;i++) { bool flag=false;//跳出循环的标志 for(int j=n-1;j>i;j--) { if(a[j]<a[j-1]) { Swap(a[j],a[j-1]); flag=true; } } if(!flag) break; } }
同理,我们可以让大元素下沉
void BublbeDown(int a[],int n) { for(int i=0;i<n-1;i++) { bool flag=false;//跳出循环的标志 for(int j=0;j<n-i-1;j++) { if(a[j]>a[j+1]) { Swap(a[j],a[j+1]); flag=true; } } if(!flag) break; } }
使用二者的结合:双向起泡,小的上浮的同时,大的下沉
void DoubleDubble(int a[],int n) { bool flag=true; int low=0,heigh=n-1; while(low<heigh && flag) { flag=false; for(int i=low;i<heigh;i++) //下沉 { if(a[i]>a[i+1]) { Swap(a[i],a[i+1]); flag=true; } } heigh--; //下沉末端-1 for(int j=heigh;j>low;j--) //上浮 { if(a[j]<a[j-1]) { Swap(a[j],a[j-1]); flag=true; } } low++; //上浮首端+1 } }
相关文章推荐
- C语言数据结构之十进制转任意进制
- 数据结构:单链表
- C语言数据结构相关编程->链表001题
- Valid Parentheses
- 数据结构——堆(转载)
- Java数据结构与算法之数组应用——用户登陆与注册数组实现
- 数据结构 PAT 02-线性结构3 Pop Sequence
- 数据结构 PAT 02-线性结构2 Reversing Linked List 单链表实现
- 数据结构 PAT 02-线性结构1 一元多项式的乘法与加法运算
- 数据结构学习规划~
- 数据结构初语~
- 数据结构 PAT 01-复杂度2 Maximum Subsequence Sum
- 数据结构 PAT 01-复杂度1 最大子列和问题
- java系统学习(十四) --------数据结构
- java系统学习(十四) --------数据结构
- 数据结构之再学习
- 数据结构和算法学习笔记
- 数据结构广义表实验
- 帧缓冲相关数据结构整理(设备驱动开发详解)
- 《大话数据结构》的笔记(作者: 程杰)