一、选择排序也是简单排序中十分经典的排序算法。
b) 简单选择排序的基本思想:给定数组:int[] arr={里面n个数据};第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数据,将它与arrr[1]交换;第2趟,在待排序数据arr[2]~arr[n]中选出最小的数据,将它与r[2]交换;以此类推,第i趟在待排序数据arr[i]~arr[n]中选出最小的数据,将它与r[i]交换,直到全部排序完成。
c) 举例:数组 int[] a={1,4,3,5,8,10,6};
-------------------------------------------------------
第一趟排序: 原始数据:1,4,3,5,8,10,6
最大数据10,把10放在首位,也就是1和10互换位置,
排序结果:10,4,3,5,8,1,6
-------------------------------------------------------
第二趟排序:
第10以外的数据{4 3 5 8 1 6}进行比较,8最大,
排序结果:8 3 5 4 1 6
-------------------------------------------------------
第三趟排序:
除10、8以外的数据{3 5 4 1 6}进行比较,6最大 3和6互换
排序结果:6 5 4 1 3
-------------------------------------------------------
第四趟排序:
除第10、8、6以外的其他数据{5 4 1 3}进行比较,5最大 不用交换
排序结果:10 8 6 5 4 1 3
-------------------------------------------------------
第五趟排序:
除第10 8 6 5以外的其他数据{4 1 3}进行比较,4最大 不用交换
排序结果:10 8 6 5 4 1 3
第6趟排序
除第10 8 6 5 4 以外的其他数据{1 3}进行比价 3最大 1和3进行互换
排序结果 10 8 6 5 4 3 1
-------------------------------------------------------
注:每一趟排序获得最小数的方法:for循环进行比较,定义一个第三个变量temp,首先前两个数比较,把较小的数放在temp中,然后用temp再去跟剩下的数据比较,如果出现比temp小的数据,就用它代替temp中原有的数据。
代码分析:
int [] a={1,4,3,5,8,10,6}; //外层循环控制里层循环的循环次数,所以外层循环是核心人物 System.out.println("交换之前:"); for(int t:a){ System.out.print(" "+t+" "); } for(int i=0;i<a.length-1;i++){//这时候定义外层循环的指针指向下标为1的第二个数,为了里层循环下标不越界 for(int j=i+1;j<a.length;j++){ //先定义一个临时变量,保存临时结果 if(a[i]<a[j]){ int temp=a[i]; a[i]=a[j]; a[j]=temp; } } } System.out.println(); System.out.println("交换之后:"); for(int k=0;k<a.length;k++){ System.out.print(" "+a[k]+" "); }
结果:
交换之前: 1 4 3 5 8 10 6 交换之后: 10 8 6 5 4 3 1