选择排序
选择排序原理:将数组的第一个数字和后面的数字进行比较,找到最小的一个,和第一个数字进行位置交换,第一轮排序完成,然后第二轮将第二个数字与后面为排序的数字进行对比,找出最小的一个,与第二数字进行位置交换,第二轮排序完成,然后是第三个与后面未排序的数组进行位置交换,以此类推。
就是查找未排序中的最小的数字,和已经排序好的数字中最后一位数字进行位置交换。
下面请看实例:
初始值 78 ,45, 32, 96, 25, 33, 51
第一轮排序 将78与后面的数字进行对比,对比发现25最小,78与25交换位置。
第一轮排序结果为 :25 45 32 96 78 33 51
第二轮排序 将45与后面的数字进行对比,对比发现32最小,45与32交换位置。
第二轮排序结果为 :25 32 45 96 78 33 51
第三轮排序 将45与后面的数字进行对比,对比发现33最小,45与33交换位置。
第三轮排序结果为 :25 32 33 96 78 45 51
第四轮排序 将96与后面的数字进行对比,对比发现45最小,96与45交换位置。
第四轮排序结果为 :25 32 33 45 78 96 51
第五轮排序 将96与后面的数字进行对比,对比发现45最小,96与45交换位置。
第五轮排序结果为 :25 32 33 45 78 96 51
第六轮排序 将78与后面的数字进行对比,对比发现51最小,78与51交换位置。
第六轮排序结果为 :25 32 33 45 51 96 78
第七轮排序 将96与后面的数字进行对比,对比发现78最小,96与78交换位置。
第七轮排序结果为 :25 32 33 45 51 78 96
最终排序完成 最终结果为 25 32 33 45 51 78 96
下面请看java代码
1 public static void main(String[] args) { 2 int[]a={78 ,45, 32, 96, 25, 33, 51}; 3 //进行外层循环,长度-1是因为数字下标从0开始,长度是从1开始,如果不减1, 4 //最后一次排序是没有意义的,因为倒数第二次就已经排序好了。 5 for (int i = 0; i <a.length-1;i++) { 6 //设置初始值,将第一个数字赋给min 7 int min=a[i]; 8 //将第一个数字下标赋给index 9 int index=i; 10 //内层循环,将min与其后面的数字进行逐个对比 11 //j+1是因为第一个数字是min,已经取出来了,所以与j+1也就是第二个数字进行对比,总不能自己和自己对比吧。 12 for (int j=i+1;j<a.length;j++) { 13 //如果发现有比min小的,那么进行位置交换 14 if(a[j]<min) 15 { 16 min=a[j]; 17 //将被交换数字下标取出,方面后面的交换赋值 18 index=j; 19 } 20 } 21 //到了这一步已经取出了这轮对比中最小值了 22 int temp=a[i]; 23 //将最小值赋给a[i] 24 a[i]=min; 25 //将被交换的那个数字位置放上a[i] 26 a[index]=temp; 27 //打印每次排序后的结果 28 System.out.print("第"+(i+1)+"次排序结果为 :"); 29 for (int k : a) { 30 System.out.print(k+" "); 31 32 } 33 System.out.println(); 34 } 35 36 }