南海石门中学第六届创新班 2015-5-16 课时总结
2016-02-15 19:34
183 查看
排序算法,是信息学奥赛中最基本的算法之一,但同时也是最重要的。这节课,老师便给我们复习了以下几种简单排序算法。选择排序 选择排序,我自认为是最直观的排序方法之一。主要算法思路是每一次都选出最小的,然后直接移动到一个序列中(序列一开始是空的),并将原来的删除。还有一个略微改进的算法,直接在主序列中寻找第i小,并把它和相应的序列中另一个位置交换(另一个位置是指,数组中的第i个元素)。 过程如下:
(以数列1 4 2 8 5 7为例)
优化前: 优化后:(主):1 4 2 8 5 7 (主):1 4 2 8 5 7(子):空
(选出第i小,此时i=1) (选出第i小,此时i=1)(主)4 2 8 5 7 (主):1 4 2 8 5 7(直接与第一个交换,这里因为第一个最小,所以看上去没有交换)(子)1
(选出第i小,此时i=2) (选出第i小,此时i=2)(主)4 8 5 7 (主):1 2 4 8 5 7(子)1 2
(选出第i小,此时i=3) (选出第i小,此时i=3)(主)8 5 7 (主):1 2 4 8 5 7(看上去没有交换,但实际上是交换了的)(子)1 2 4
(选出第i小,此时i=4) (选出第i小,此时i=4)(主)8 7 (主):1 2 4 5 8 7(子)1 2 4 5
(选出第i小,此时i=5) (选出第i小,此时i=5)(主)8 (主):1 2 4 5 7 8(子)1 2 4 5 7
(选出第i小,此时i=6) (排序结束)(主)空(子)1 2 4 5 7 8(排序结束)
下面给出选择排序的程序(已优化):
(以数列1 4 2 8 5 7为例)
优化前: 优化后:(主):1 4 2 8 5 7 (主):1 4 2 8 5 7(子):空
(选出第i小,此时i=1) (选出第i小,此时i=1)(主)4 2 8 5 7 (主):1 4 2 8 5 7(直接与第一个交换,这里因为第一个最小,所以看上去没有交换)(子)1
(选出第i小,此时i=2) (选出第i小,此时i=2)(主)4 8 5 7 (主):1 2 4 8 5 7(子)1 2
(选出第i小,此时i=3) (选出第i小,此时i=3)(主)8 5 7 (主):1 2 4 8 5 7(看上去没有交换,但实际上是交换了的)(子)1 2 4
(选出第i小,此时i=4) (选出第i小,此时i=4)(主)8 7 (主):1 2 4 5 8 7(子)1 2 4 5
(选出第i小,此时i=5) (选出第i小,此时i=5)(主)8 (主):1 2 4 5 7 8(子)1 2 4 5 7
(选出第i小,此时i=6) (排序结束)(主)空(子)1 2 4 5 7 8(排序结束)
下面给出选择排序的程序(已优化):
#include <iostream> #include <algorithm> using namespace std; int main(){ int n; cin>>n; int a ; for (int i=0;i<n;++i){ cin>>a[i]; } int min_i; for (int i=0;i<n;++i){ min_i=i; for (int j=i+1;j<n;++j){ if (a[j]<a[min_i]){ min_i=j; } } swap(a[i],a[min_i]); } for (int i=0;i<n;++i){ cout<<a[i]<<' '; } cout<<endl; return 0; }
相关文章推荐
- 南海石门中学第六届创新班 2015-5-23 课时总结
- 南海石门中学第六届创新班 2015-5-30 课时总结
- 数学游戏(mathgame)解题方法 - N皇后位运算解法,14皇后亦在1秒中
- Friend解题报告 - 并查集练习
- Mode用cin的不超时程序
- Tree - NHIP第三题解题报告 - 并查集入门练习
- NHIP(2015)解题报告(第3题)
- IOS引入第三方冲突解决办法
- iOS在线音频播放FreeStreamer
- hdoj5247找连续数【rmq】
- iOS之@selector的函数传递多个参数
- linux下redis安装
- c#里,WebBrowser实现不加载图片等控制
- c#值类型与引用类型,可空类型
- iOS之iOS键盘隐藏
- c语言:用8个2*1的小矩形横着或竖着无重叠地覆盖一个2*8的大矩形,总共有多少种方法?
- 种树郭橐驼传
- 【解决】SOUI向导生成项目(VC2013以上版本编译时)无法运行XP解决
- hdoj5249KPI【set】
- iOS之iOS键盘隐藏