简单选择排序
2016-03-16 21:24
232 查看
简单选择排序也叫作直接选择排序
(1)设待排序的记录存放在数组r[1…n ]中,第一趟从r[1]开始,通过n-1次比较,从n个记录中选出关键字最小的记录,记为r[k],交换r[1]和r[k].
(2)第二趟从r[2]开始,通过n-2次比较,从n-1个记录中选出关键字最小的记录,记为r[k],交换r[1]和r[k]。
(3)第i趟从r[i]开始,通过n-i次比较,从n-1+1个记录中选出关键字最小的记录,记为r[k],交换r[i]和r[k].
(4)经过n-1趟,排序完成。
最坏情况:3(n-1)
比较次数:1/2(n*n-n)
时间复杂度:O(n*n)
空间复杂度:O(1)
基本思想:
每一趟在后面n-i+1个中选出关键字最小的记录,作为有序序列的第i个记录(1)设待排序的记录存放在数组r[1…n ]中,第一趟从r[1]开始,通过n-1次比较,从n个记录中选出关键字最小的记录,记为r[k],交换r[1]和r[k].
(2)第二趟从r[2]开始,通过n-2次比较,从n-1个记录中选出关键字最小的记录,记为r[k],交换r[1]和r[k]。
(3)第i趟从r[i]开始,通过n-i次比较,从n-1+1个记录中选出关键字最小的记录,记为r[k],交换r[i]和r[k].
(4)经过n-1趟,排序完成。
[code]void SelectSort(SqList &K) { //对顺序表L做简单选择排序 for(i=1;i<L.length;++i) { //在L.r[i...L.length]中选择关键字最小的记录 k=i; for(j=j+1;j<=L.length;j++) if(L.r[j].key<L.r[k].key)k=j;//k指向此趟排序中关键字最小的记录 if(k!=i) { t=L.r[i]; L.r[i]=L.r[k];//交换r[i]与r[k] L.r[k]=t; } } }
算法分析
移动次数
最好情况: 0最坏情况:3(n-1)
比较次数:1/2(n*n-n)
时间复杂度:O(n*n)
空间复杂度:O(1)
算法特点
[code] 不稳定
相关文章推荐
- Matlab
- 理解JavaScript中的回调函数
- 异常处理技巧(转)
- 游戏
- 面向对象编程
- LightOJ 1255 - Substring Frequency
- C++typede详解
- 插值原理—线性,球面插值 ,四元数
- 获取被人电话本的小恶意程序(学习用的并非病毒)
- strcasecmp
- 蓝桥杯辅导视频学习-递归与循环
- async和await
- C# MessageBox 消息对话框
- Sigma Function (因子和)
- HDU5636 -- Shortest Path -- floyd
- 导航条的属性
- Hadoop - MapReduce
- hdu 1171 Big Event in HDU
- (转载)如何用PHP开发一个完整的网站 讲解开发流程 多人开发
- 图的邻接矩阵实现