原理
选择排序是从一堆参与比较的数据中找出最小值,然后拿着这个最小值与此时参与比较的元素中的最前面的那个交换位置。除去这个最小值,剩下的元素为下一轮循环的参与比较的元素,继续找出最小值,然后与当前参与比较的元素中的最前面的那个进行交换,直到最后。
举例
例如数组元素为:5,6,4,7,1
第一次循环:
(1最小,5和1交换位置): 1,6,4,7,5
至此,1被选出来,剩下的元素为下一轮参与比较的元素:6,4,7,5
第二次循环:
(4最小,6与4交换位置): 4,6,7,5
至此,4被选出来,剩下的元素为下一轮参与比较的元素:6,7,5
第三次循环:
(5最小,6与5交换位置):5,7,6
至此,5被选出来,剩下的元素为下一轮参与比较的元素:7,6
第四次循环:
(6最小,7与6交换位置):6,7
至此,循环结束,排序结果为:1,4,5,6,7
如何选出最小值
先假设当前参与比较的元素中最前面的数为最小值(arr[min]),再依次和后面的数进行比较,若无比这个数还小的数,则这个数就是最小值;若有比这个数还小的数,则将下标赋值给min,循环结束将找到的最小值与当前参与比较的元素中最前面的数进行交换。
Java代码
public static void main(String[] args){
int[] arr={5,6,4,7,1};
for (int i=0;i<arr.length-1 ;i++ )
{
//i刚好是每一次的待比较数据的第一个元素的下标
//先假设最小值下标为最前面的元素的下标
int min=i;
for (int j=i+1;j<arr.length ;j++ )
{
//如果有比当前最小值还小的数,就将该值的下标赋给min
if (arr[j]<arr[min])
{
min=j;
}
}
//如果min还是i的话,则证明当前参与比较的数中最前面的就是最小值,就不需要交换位置了.
//如果min不是i的话,则证明最小值是其他的数,就交换位置,将最小值与当前参与比较的数的最前面的交换
if (i!=min)
{
//交换位置
int temp;
temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
}
}
//按序输出数组元素
for (int i=0;i<arr.length;i++)
{
System.out.println(arr[i]);
}
}
输出结果
1
4
5
6
7