选择排序的两种实现方法

1.常见的选择排序

 1 public class Case {
 2 
 3     public static void main(String[] args) {
 4         int a[]=new int[] {5,4,27,1,9,8,3,12,-9};
 5         //查询外部总循环次数
 6         for (int i = 0; i < a.length - 1; i++) {    
 7             //假设第一个值为最小值索引
 8             int  min = i;
 9             //如果min不为最小值,则遍历数组,将最小的值保存为min索引
10             for (int j = i + 1; j < a.length; j++) {
11                   if (a[min] > a[j]) {
12                        min = j;
13                   }
14             }
15             //如果此时数组下标min不等于i,则交换啊[min]和a[i]的值;
16             if (min != i) {
17                int tmp = a[min];
18                a[min] = a[i];
19                a[i] = tmp;
20             }             
21       }
22         for(int i=0;i<a.length;i++) {
23             System.out.println(a[i]);
24         }
25         
26     }

2.“反向”的选择排序

常见的选择排序将最小值依次放在数列最左边,换种思路将最大值依次放在最右边;实际两种算法的空间复杂度并没有区别,不过可以更深的了解选择排序。

public class Demo {

    public static void main(String[] args) {

        int[] a = {-67 , -34 ,  -5 , 5 , 6  , 25  ,45};
        
        // 查询总次数
        for(int i = 0;i<a.length - 1 ;i++) {
            
            //保存最大元素的索引
            int  maxIndex = 0; // 假设数组的第一个位置为最大元素索引
            
            for(int k = 1;k<a.length - i;k++) {
                
                if(a[k]>a[maxIndex]) {
                    maxIndex = k;
                }
                
            }
            if(maxIndex!=a.length - i - 1) {
                int temp = a[maxIndex];
                a[maxIndex] = a[a.length - i - 1];
                a[a.length - i - 1] = temp;
            }
        }
        
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }

猜你喜欢

转载自www.cnblogs.com/ywfblog/p/12545638.html