上篇复习了冒泡,这篇来分析选择排序。
选择排序是第一回是第一个数和后面的比,第二轮是第二个数和后面的比,以此类推。这样比出来,第一个比较的数要么是最大的,要么是最小的。
还是5个数
1 2 3 4 5
第几次循环 | 比较次数 |
1 | 4 |
2 | 3 |
3 | 2 |
4 | 1(第一个和第二个比) |
此时循环代码如下,5个数,循环4次,比较次数为5-第几次循环数
这次是用第一个数组元素下标为0的数开始与后面的数比,所以我们从0开始循环,一会不用更多变量元素来比较
我们发现,在循环过程中,从第一个数往后依次判断出是最大或最小值,循环过程如下
1: for(int i=0;i<arr.length-1;i++){//循环轮次
2: for(int j=i+1;j<arr.length;j++){//循环比较次数
3: if(arr[i]>arr[j]){
4: temp=arr[i];//依次是arr[i]和arr[i+1],arr[i+2],arr[i+3]…来比较
5: arr[i]=arr[j];
6: arr[j]=temp;
7: }
8: }
9: }
外层也可以从1开始循环,但我们要i这个元素来比较。
整体代码如下:
1: public class Arrysort2 {
2: public static void main(String[] args){
3: int arr[]={56,89,42,54,16,92,76,24,61};
4: int temp=0;
5: for(int i=0;i<arr.length-1;i++){//循环轮次
6: for(int j=i+1;j<arr.length;j++){//循环比较次数
7: if(arr[i]>arr[j]){
8: temp=arr[i];
9: arr[i]=arr[j];
10: arr[j]=temp;
11: }
12: }
13: }
14:
15: System.out.print("数组中数字从小到大依次为:");
16: for(int i=0;i<arr.length;i++){
17: System.out.print(arr[i]+" ");
18: }
19: }
20: }