您的位置:首页 > 其它

【排序】选择排序算法

2016-08-04 19:14 225 查看
特别说明

对于算法,重在理解其思想、解决问题的方法,思路。因此,以下内容全都假定待排序序列的存储结构为:顺序存储结构。

选择排序思想

选择排序又称为简单选择排序,主要思想描述如下:

01.假设待排序列表为

//
// summary     : 选择排序
// in param    : seqlist 待排序列表.同时也是排完序列表.
// in param    : nLen 列表长度
// out param   : --
// return      : --
// !!!note       : 01.以下实现均假设一切输入数据都合法.即:内部不对参数全法性进行校验,默认它们全都合法有效.
//               02.排序开始前 seqlist 是无序的,排序结束后 seqlist 是有序的.
void select_sort(int seqlist[/*nLen*/], const int nLen) {
if (nLen <= 1) {
return;// only one element.
}
auto nInnerIdx = 0;
auto nMinIdx   = 0;
auto nTemp     = 0;
for (auto nOuterIdx = 0, nInnerIdx = 0; nOuterIdx < nLen - 1; ++nOuterIdx) {
nInnerIdx = nOuterIdx;
nMinIdx   = nInnerIdx;
while (++nInnerIdx < nLen) {
if (seqlist[nInnerIdx] < seqlist[nMinIdx]) {
nMinIdx = nInnerIdx;
}
}
if (nMinIdx != nOuterIdx) {
nTemp              = seqlist[nOuterIdx];
seqlist[nOuterIdx] = seqlist[nMinIdx];
seqlist[nMinIdx]   = nTemp;
}
}
}


简单选择排序算法编码参考

算法分析

简单选择排序算法时间复杂度与插入排序算法、冒泡排序算法一样,都是

。辅助空间也一样,也是

。但相比插入排序与冒泡排序,选择排序的数据移动操作倒没那么频繁(因为在确定未排序部分的最小(或最大)元素时,我们不需要执行移动操作,只需要用下游标标记即可)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: