private static void select_Sort(int[] unsorted){//选择排序
for(int i=0;i<unsorted.length;i++){
int min=unsorted[i];
int temp;
int index=i;
for(int j=i+1;j<unsorted.length;j++){
if(min>unsorted[j]){
min=unsorted[j];
index=j;
}
}
temp=unsorted[i];
unsorted[i]=min;
unsorted[index]=temp;
}
}
选择排序从理解上并不困难,首先从一堆元素之中找到最小值,然后将它排列到数组的首元素位置,可是这样做的话,首元素的值不就被覆盖了吗?那么我们该怎么操作才能保住第一个值,可想而知可以把以前最小值的元素的位置用来存储首元素,事实也的确如此。接下来的操作和最初的操作也一样,只不过之前的最小的元素已经不再考虑的范围之类了,只需考虑余下的元素,就这样重复此步骤形成一条有序的序列,从这些元素中找最大值也是如此,只不过把最大值与最后的元素的调换一下。
代码解析:
1.第一个for循环是一次将每个元素都与其后面的元素做一个比较,初始的时候都把当前的位置假象成是最小值,并保留其索引值。
2.第二个for循环是把前面假象的最小值与其后面的元素一一比较,如果后面的元素有比假象的最小值还要小,则记下他的位置。
3.退出了第二个for循环之后也找到了最小值和最小值的位置,则将它与假象的最小值互换,继续执行第一层for循环,直到所有元素都完成排序。
18万+

被折叠的 条评论
为什么被折叠?



