主题思想:每次在待排序列中找到最小的元素,放到已经排好的数据后面
/**
* 选择排序
* 思想:
* 在数组里,每次在待排序列中找出最小的一个,放到
* 已经排好的序列中
* 例如:{3,1,6,2,8,5,9}
* 第一趟:在序列中找到1,放在最前面,作为排好的,数列就成了{1,3,6,2,8,5,9}
* 第二趟:在1后面的序列中找到2,放在1的后面,数列就成了{1,2,3,6,8,5,9}
*/
public class test1 {
public static void main(String[] args) {
int arr[] = {3,5,1,7,8,2,9,4,0,6};
int temp = 0; //用于保存临时变量
//外层的for循环用于控制待排序列
for (int i = 0; i < arr.length ; i++) {
int min = i;
for (int j = i + 1; j < arr.length ; j++)
{
if (arr[min] > arr[j])
{
min = j;
}
}
if(min != 0){
temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}
System.out.println(Arrays.toString(arr));
}
}
运行结果:
代码执行过程:
i指向数组下标
j控制i所指向的元素的后面的所有元素,
第一趟:{3,5,1,7,8,2,9,4,0,6}
i==0; arr[i]=3;将i赋值给min,进入第二层for循环,用arr[min]和后面所有的元素进行比较,找出其中最小的元素,并将其下标赋值给min
第二层for循环执行完之后,min指向待排序列中最小的元素,然后执行交换操作,将min赋值给i;然后i++,指向下一个元素,即待排元素中的第一个,然后进入第二趟循环
第二趟:{1,5,3,7,8,2,9,4,0,6}
i==1,此时i指向5,将i的下标赋值给min,min进入第二层循环,和待排序列中的所有元素进行比较,并且找出最小的,将其下标赋值给min,第二层循环结束后,min带着最小 元素出去,进行交换·····