码迷,mamicode.com
首页 > 编程语言 > 详细

【排序】选择排序算法

时间:2016-08-04 21:23:19      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

特别说明

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

 

选择排序思想

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

    01.假设待排序列表为 技术分享。选择排序将 技术分享 划分为由已排序好序的 技术分享 部分 以及 未排序的 技术分享 部分;

    注意:刚开始时 技术分享 部分其实可认为只有一个元素,即:技术分享 元素

    02.每次从 技术分享 部分中选出最小(或最大)的那个元素,将其放在 技术分享 的末尾位置;

    03.重复02步骤,直到 技术分享 部分为空为止;

 

编码参考

    简单选择排序是非常简单的一种排序算法。其编码参考如下:

技术分享
 1 // 
 2 // summary     : 选择排序
 3 // in param    : seqlist 待排序列表.同时也是排完序列表.
 4 // in param    : nLen 列表长度
 5 // out param   : --
 6 // return      : --
 7 // !!!note       : 01.以下实现均假设一切输入数据都合法.即:内部不对参数全法性进行校验,默认它们全都合法有效.
 8 //               02.排序开始前 seqlist 是无序的,排序结束后 seqlist 是有序的.
 9 void select_sort(int seqlist[/*nLen*/], const int nLen) {
10     if (nLen <= 1) {
11         return;// only one element.
12     }
13     auto nInnerIdx = 0;
14     auto nMinIdx   = 0;
15     auto nTemp     = 0;
16     for (auto nOuterIdx = 0, nInnerIdx = 0; nOuterIdx < nLen - 1; ++nOuterIdx) {
17         nInnerIdx = nOuterIdx;
18         nMinIdx   = nInnerIdx;
19         while (++nInnerIdx < nLen) {
20             if (seqlist[nInnerIdx] < seqlist[nMinIdx]) {
21                 nMinIdx = nInnerIdx;
22             }
23         }
24         if (nMinIdx != nOuterIdx) {
25             nTemp              = seqlist[nOuterIdx];
26             seqlist[nOuterIdx] = seqlist[nMinIdx];
27             seqlist[nMinIdx]   = nTemp;
28         }
29     }
30 }
简单选择排序算法编码参考

 

算法分析

    简单选择排序算法时间复杂度与插入排序算法、冒泡排序算法一样,都是 技术分享 。辅助空间也一样,也是 技术分享。但相比插入排序与冒泡排序,选择排序的数据移动操作倒没那么频繁(因为在确定未排序部分的最小(或最大)元素时,我们不需要执行移动操作,只需要用下游标标记即可)。

 

【排序】选择排序算法

标签:

原文地址:http://www.cnblogs.com/tongy0/p/5724603.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!