算法描述
选择排序的基本思想是:如果共有n个元素,那么第一轮的时候就再n个元素中找到最小的元素,如果它不是排在第一个,就让它与第一个元素交换位置。第二轮再在除去最前面的元素(也就是上一轮找到的最小元素)中,再找到最小的元素,使它的位置确定在当前这些元素的最前面。以此类推。。。每一轮都可以确定一个元素的位置,只需要进行n-1次循环后,就可以完成排序。
例:原始数据为 15,11,25,78,29,8 需要从小到大排序。
第一轮,在6个元素中找到最小值,然后与第一个元素交换位置。第一个8确定位置。
第二轮,在剩下的5个元素中找到最小的,然后将它换到目前相比较的元素中的最前面。确定11的位置。
第三轮,在剩下的4个中找到最小的,换到此时的最前面,也就是25所在的位置。确定15的位置。
第四轮,在剩下的3个中找出最小的,换到此时的最前面,确定25的位置。
第5轮,在剩下的2个中找到小的,使它的位置在前面。确定29,剩下一个78也自动确定。排序完成。
可以发现,循环的次数为元素个数-1,每一轮中,需要把最小元素换到的位置为轮数,第一轮时,确定的位置是第一个数,第二轮是第二个数,以此类推。。。
代码实现
int array[] = {15, 11,25,78, 29,8};
for (int i = 0; i < array.length; i++) {
int index = i;
int min = array[i]; //先假定第一个数为最小数
for (int j = i + 1; j < array.length; j++) {
//如果发现有元素比我们的假定最小数还小,就让此元素成为新的假定最小数。
if (min > array[j]) {
min = array[j];
index = j;
}
}
//将我们找到的最小数与最前面的元素交换位置。
int temp = array[index];
array[index] = array[i];
array[i] = temp;
}
System.out.println(Arrays.toString(array));