双向冒泡排序
来源:互联网 发布:excel表格无法粘贴数据 编辑:程序博客网 时间:2024/05/17 03:31
<center><h2>问题 G: 双向冒泡排序</h2></center><h2>题目描述</h2><div class="content"><h1 style="margin: 0px; font-size: 30px; line-height: 36px; font-family: 'Times New Roman'; color: rgb(51, 51, 51); text-rendering: optimizelegibility;"><span style="COLOR: rgb(255,0,0)">注:本题只需要提交填写部分的代码,请按照C++语言方式提交。</span></h1><p>双向冒泡从小到大排序算法描述:(1)从当前序列的第1个元素开始,对相邻元素从前往后两两比较,不满足条件(从小到大)则彼此交换,一直到序列结束。此时最后1个元素为最大值。(2)从当前序列的倒数第2个元素开始,对相邻元素从后往前两两比较,不满足条件则彼此交换,一直到序列开始。此时第1个元素为最小值。(3)将第2个元素作为新序列的开始,倒数第2个元素作为新序列的结束,重复(1)~(2),直到新序列没有元素。改进的双向冒泡从小到大排序算法描述:(a)在上述算法第(1)步,记录每次的交换位置,令high表示最后1次交换位置,若比较过程未发生交换,则算法结束;(b)在算法第(2)步,只需要从high向前比较即可,比较过程中记录每次的交换位置,令low表示最后1次交换位置,若比较过程未发生交换,则算法结束;(c)在算法第(3)步,令新序列为开始位置为low,结束位置为high,重复(a)~(b),直到新序列没有元素。</p><p>#include<iostream>using namespace std;int main(){ int a[100],i,n; cin>>n; for(i=0; i<n; i++) cin>> a[i]; int low, high,lastSwapPos,temp,cnt; low = 0; high = n - 1; while (low < high) { lastSwapPos = high; //设置未排序序列的最后一个元素位置 for (i=low; i<lastSwapPos; i++) { cnt++; if (a[i]>a[i+1]) { temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; high = i; //记录交换位置 } } if (lastSwapPos == high) //若未进行交换操作,说明排序已经完成 break;</p><p> lastSwapPos = low; //设置未排序序列的第一个元素位置<span style="COLOR: #ff0000"> /* 请在该部分填写缺少的代码 */</span> if (lastSwapPos == low) //若未进行交换操作,说明排序已经完 break; }</p><p> for(i = 0; i<n; i++) cout<<a[i]<<" "; cout<<endl; return 0;}</p><p></p></div><h2>输入</h2><div class="content"><p>n和n个整数</p></div><h2>输出</h2><div class="content"><p>从小到大排序后的数列</p></div><h2>样例输入</h2><pre class="content"><span class="sampledata">621 45 85 47 3 15</span>
样例输出
3 15 21 45 47 85
#include<iostream>using namespace std;int main(){ int a[100],i,n; cin>>n; for(i=0; i<n; i++) cin>> a[i]; int low, high,lastSwapPos,temp,cnt; low = 0; high = n - 1; while (low < high) { lastSwapPos = high; //设置未排序序列的最后一个元素位置 for (i=low; i<lastSwapPos; i++) { cnt++; if (a[i]>a[i+1]) { temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; high = i; //记录交换位置 } } if (lastSwapPos == high) //若未进行交换操作,说明排序已经完成 break; lastSwapPos = low; //设置未排序序列的第一个元素位置 for (i=high; i>lastSwapPos; i--) { if (a[i]<a[i-1]) { temp = a[i]; a[i] = a[i-1]; a[i-1] = temp; low = i; //记录交换位置 } } if (lastSwapPos == low) //若未进行交换操作,说明排序已经完 break; } for(i = 0; i<n; i++) cout<<a[i]<<" "; cout<<endl; return 0;}
0 0
- 双向冒泡排序法
- 双向冒泡排序法
- 双向冒泡排序算法
- 双向冒泡排序
- 双向冒泡排序
- 双向冒泡排序
- 双向冒泡排序
- java 双向冒泡排序
- 双向冒泡排序
- 冒泡双向排序
- 双向冒泡排序
- 双向冒泡排序
- 双向冒泡排序
- 双向冒泡排序
- 双向冒泡排序
- 双向冒泡排序
- 双向冒泡排序
- 双向冒泡排序
- iOS:tableView表视图顶部多余部分
- 互联网应用的两种工作模式:客户/服务器模式与P2P模式
- 关于SQL Server将一列的多行内容拼接成一行的问题讨论
- Dubbo服务框架原理
- http get 方式参数的长度限制
- 双向冒泡排序
- iOS开发使用半透明模糊效果方法整理
- APP在Android中的运行机制(二)——Manifest 文件
- 111111
- dpdk编译安装
- DevExpress gridView查询不到数据时显示 没有查询到数据
- frameSet和iframe的基本理解
- 多线程-多核心-SMP-NUMA-乱序执行技术
- QApplication和QCoreApplication的用法