原理:每一次遍历得到未排序数组中的最小的一个值,然后将这个值放置到已排好序数组部分的末尾处,直到全部数组元素排好序为止。假设有n个元素 ,当前前p个元素已经排好序,这时遍历 数组(n-p+1,n-1)之间的最小元素并将得到的结果放置到第p个位置。基于这种思想的排序算法有 简单选择排序,树形选择排序和堆排序。
思想:假如一个有n个元素的数组a={1,2,3,4,5...n},第一次从n个元素中选择出最小的元素与a[0]的位置上元素交换,第二次将第2小的元素与a[1]的位置上元素交换,第i次将第i小的元素与a[i-1]的位置上元素交换,只到遍历到最后一个元素,不用遍历,自然为最大值
举例:
数组 int[] arr={50,20,80,40,90,10};
第一趟排序: 原始数据:50,20,80,40,90,10
最小数据10,把10放在首位,也就是10和50互换位置,
排序结果:10 20 80 40 90 50
第二趟排序:
第10以外的数据{20 80 40 90 50}进行比较,2最小,
排序结果:10 20 80 40 90 50
第三趟排序:
除10、20以外的数据{80 40 90 50}进行比较,40最小,80和40交换
排序结果:10 20 40 80 90 50
........
以此论推,5次即可比较完成
代码:
public static void main(String args[])
{
int [] a={20,10,50,40,30,70,60,80,90,100};
for(int i = 0; i < a.length - 1; i++) {// 做第i趟排序,一共需要拍n-1次
int k = i;
for(int j = k + 1; j < a.length; j++){
if(a[j] < a[k]){
k = j; //找到最小值所在的位置
}
}
//一轮循环结束,也就是找到本轮循环的最小的数以后,再进行交换
if(i != k){ //交换a[i]和a[k]
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
System.out.println("交换后:");
for(int item:a){
System.out.print(item+" ");
}
}
截图: