今天闲来无事,复习了一下选择排序算法
算法基本原理:
一次选定数组中的每一个数,记下当前位置并假设它是从当前位置开始后面数中的最小数min=i,从这个数的下一个数开始扫描直到最后一个数,并记录下最小数的位置min,扫描结束后如果min不等于i,说明假设错误,否则交换min与i位置上数。
C算法实现:
详细分析:
1
for (i=0;i<n;i++)
2
{
3
min=i;
4
……
5
}
for (i=0;i<n;i++)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
}
for(int j=i+1;j<n;j++)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
}
if (i!=min)2
{3
temp=a[i];4
a[i]=a[min];5
a[min]=temp;6
}在第二个循环扫描结束后如果min不等于i,说明假设错误,保持原值未知不变,否则交换min与i位置上数据
实际测试:
测试结果
个数:6
数据:10 25 3 0 56 88
第一组显示的是原始输入的数据和数据对应的内存地址
第二组显示的经过选择排序后的数据和数据对应的内存地址
reference
http://baike.baidu.com/view/547263.htm



}
浙公网安备 33010602011771号