博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

选择排序算法

Posted on 2009-08-19 21:38  CalmBright  阅读(999)  评论(0编辑  收藏  举报

今天闲来无事,复习了一下选择排序算法
算法基本原理:
一次选定数组中的每一个数,记下当前位置并假设它是从当前位置开始后面数中的最小数min=i,从这个数的下一个数开始扫描直到最后一个数,并记录下最小数的位置min,扫描结束后如果min不等于i,说明假设错误,否则交换min与i位置上数。
C算法实现:

Code

详细分析:

1for (i=0;i<n;i++)
2     {
3    min=i;
4        ……
5     }

该段代码一次选定数组中的每一个数,记下当前位置并假设它是从当前位置开始后面数中的最小数min=i;

1for(int j=i+1;j<n;j++)
2     {
3        if (a[j]<a[min])
4        min=j;
5     }

从上一层循环的min=i这个数的下一个数开始扫描,并进行数值得比较直到最后一个数,并记录下最小数的位置min

1if (i!=min)
2{
3  temp=a[i];
4  a[i]=a[min];
5  a[min]=temp;
6}

在第二个循环扫描结束后如果min不等于i,说明假设错误,保持原值未知不变,否则交换min与i位置上数据
实际测试:

Code

测试结果
个数:6
数据:10 25 3 0 56 88
第一组显示的是原始输入的数据和数据对应的内存地址
第二组显示的经过选择排序后的数据和数据对应的内存地址


reference
http://baike.baidu.com/view/547263.htm