• 选择排序


    package com.cisco.www.test;


    import java.util.Arrays;

    /**
    * 选择排序算法思想:
    * 每次从待排序的元素中选出最小或者最大的元素
    * 存放在序列的起始位置,直到全部元素排序完成
    * 选择排序需要比较O(N^2)/2次,所以时间复杂度是O(N^2)
    *但是选择排序元素交换最多只发生N-1次,这个性能比冒泡排序的性能要好很多
    *
    *
    */
    public class SelectSort {
    public static void selectionSort(int[] arr){
    if(arr==null||arr.length<2){
    return;
    }
    for(int i = 0 ; i < arr.length ; i++){
    //用minIndex记住最小位置的索引
    int minIndex = i;
    for(int j = i +1 ; j<arr.length;j++){
    // swap(arr,i,j); //这样的交换,只要遇到了一个比未排序序列中第一个元素小的值就交换,可能需要交换很多次
    minIndex=arr[j]<arr[minIndex]?j:minIndex;

    }
    swap(arr,i,minIndex);
    }

    }
    private static void swap(int[] arr, int i, int j) {
    int tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
    }
    public static void main(String[] args){
    int testTime = 1000000;
    int size = 100 ;
    int value =100;
    boolean succeed = true;
    for(int i = 0 ; i <testTime ; i++){
    int[] arr1 = generateRandomArray(value,size);
    int[] arr2= copyArray(arr1);
    selectionSort(arr1);
    comparator(arr2);
    if(!isEquals(arr1,arr2)){
    succeed=false;
    break;
    }

    }
    System.out.println(succeed?"Nice":"Fucking fucked");
    int[] arr3= generateRandomArray(size,value);
    printArray(arr3);
    selectionSort(arr3);
    printArray(arr3);

    }

    private static void printArray(int[] arr) {
    if(arr==null){
    return;
    }
    for(int i = 0 ; i <arr.length ; i++){
    System.out.print(arr[i]+" ");
    }
    System.out.println();
    }

    //test
    private static boolean isEquals(int[] arr1, int[] arr2) {
    if((arr1!=null&&arr2==null)||(arr1==null&&arr2!=null)){
    return false;
    }
    if(arr1==null&&arr2==null){
    return true;
    }
    if(arr1.length!=arr2.length){
    return false;
    }
    for(int i = 0 ; i<arr1.length;i++){
    if(arr1[i]!=arr2[i]){
    return false;
    }
    }
    return true;
    }

    private static void comparator(int[] arr) {
    Arrays.sort(arr);
    }

    //test
    private static int[] generateRandomArray(int value, int size) {
    int[] arr= new int[(int)((Math.random()*size)+1)];
    for(int i = 0 ; i<arr.length;i++){
    arr[i] = (int)(Math.random()*value+1) - (int)(Math.random()*value);
    }
    return arr;
    }
    //test
    public static int[] copyArray(int[] arr){
    if(arr==null){
    return null;
    }
    int[] res = new int[arr.length];
    for(int i = 0 ; i<arr.length;i++){
    res[i] = arr[i];
    }
    return res;
    }
    }
  • 相关阅读:
    关于W3Cschool定义的设计模式--常用的9种设计模式的介绍
    正则得介绍和使用——表单验证
    DOM的高级操作-一种JS控制元素的视觉假象
    如何理解JS中this指向的问题
    Vulkan中的实时软阴影与硬件优化
    TensorFlow Distribution(分布式中的数据读取和训练)
    TensorFlow白皮书
    TensorFlow Data模块
    新闻标签提取的评价方法
    基于TF-IDF的新闻标签提取
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/11029305.html
Copyright © 2020-2023  润新知