Ordenação de seleção e otimização de ordenação de seleção

1. Ordenação de seleção normal

    //普通选择排序
    public static void sort1(int[] array){
        int count = 0;//统计运行次数
        int cnt = 0; //交换次数
        for(int i=0;i<array.length-1;i++) {
            int min=array[i];
            int minIndex=i;
            count++;
            for(int j=i+1;j<array.length;j++){
                if(min>array[j]) {
                    min=array[j];
                    minIndex=j;
                }
            }
            if(minIndex!=i){
                cnt++;
                array[minIndex]=array[i];
                array[i]=min;
            }


        }
        System.out.println(Arrays.toString(array));
        System.out.println("运行次数:"+count+"次  交换次数:"+cnt);

    }

2. Otimize a classificação da seleção


import java.util.Arrays;
import java.util.Random;

/**
 * 选择排序优化
 */
class SelectionSort2 {
    public static void main(String[] args) {
        //产生一个随机数组
        Random r = new Random();
        int arr[] = new int[2000];
        for(int i=0;i<arr.length;i++){
            arr[i] =r.nextInt(1000);
        }

//因为本优化版本每次循环找出最大以及最小值,所以执行执行:arr.length/2
        int ArrLength = (arr.length/2);
        int  temp1,temp2;
        long count = 0;
        //记录开始时间
        long startStamp = System.currentTimeMillis();
        //算法开始
        for(int j=0;j<ArrLength;j++){
            int minIndex = j;
            int maxIndex= j;
            for(int i=j;i<arr.length-j;i++){
                if (arr[minIndex] > arr[i]) {
                    minIndex = i;
                }
                if (arr[maxIndex] < arr[i]) {
                    maxIndex= i;
                }
                count++;
            }
            temp1  = arr[minIndex];
            arr[minIndex] = arr[j];
            arr[j] = temp1;

            if(j!=maxIndex) {	//maxIndex不能再原本的minIndex位置上
                temp2 = arr[maxIndex];
                arr[maxIndex] = arr[arr.length - j - 1];
            }else{
                temp2 = arr[minIndex];
                arr[minIndex] = arr[arr.length - j - 1];
            }
            arr[arr.length - j - 1] = temp2;
        }
        //计算算法结束时间
        long endStamp = System.currentTimeMillis();
        System.out.println("用时总长:"+(endStamp-startStamp));
        System.out.println("循环次数:"+count);


        System.out.println(Arrays.toString(arr));
    }
}

Acho que você gosta

Origin blog.csdn.net/Javascript_tsj/article/details/123408086
Recomendado
Clasificación