假如我们现在要排序的数组为[3,1,0,2,8,4,2]。那么选择排序的排序流程为:
现在整个数组是不是已经变得有序了呢。接下来我们看图解版本
接下来上代码
int i; // 有序区的末尾位置
int j; // 无序区的起始位置
int min; // 无序区中最小元素位置
int []a=new int[]{3,1,0,2,8,4,2};
for(i=0,n=a.length; i<n; i++) {
min=i;
// 找出"a[i+1] ... a[n]"之间的最小元素,并赋值给min。
for(j=i+1; j<n; j++) {
if(a[j] < a[min])
min=j;
}
// 若min!=i,则交换 a[i] 和 a[min]。
// 交换之后,保证了a[0] ... a[i] 之间的元素是有序的。
if(min != i) {
int tmp = a[i];
a[i] = a[min];
a[min] = tmp;
}
}
选择排序讲完了。在这里温馨提示大家,学习算法时,我们没必要拘泥于代码的实现,那没有意义。我的建议就是深入理解步骤,当你理解步骤以后代码是随你怎么玩都可以的。
原文:https://www.cnblogs.com/zhixiang-org-cn/p/9245654.html