今天闲来无事,复习了一下选择排序算法
算法基本原理:
一次选定数组中的每一个数,记下当前位置并假设它是从当前位置开始后面数中的最小数min=i,从这个数的下一个数开始扫描直到最后一个数,并记录下最小数的位置min,扫描结束后如果min不等于i,说明假设错误,否则交换min与i位置上数。
C算法实现:
Code
详细分析:
1
for
(i
=
0
;i
<
n;i
++
)
2 {
3 min=i;
4 ……
5 }
2 {
3 min=i;
4 ……
5 }
该段代码一次选定数组中的每一个数,记下当前位置并假设它是从当前位置开始后面数中的最小数min=i;
1
for
(
int
j
=
i
+
1
;j
<
n;j
++
)
2 {
3 if (a[j]<a[min])
4 min=j;
5 }
2 {
3 if (a[j]<a[min])
4 min=j;
5 }
从上一层循环的min=i这个数的下一个数开始扫描,并进行数值得比较直到最后一个数,并记录下最小数的位置min
1
if
(i
!=
min)
2 {
3 temp=a[i];
4 a[i]=a[min];
5 a[min]=temp;
6}
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