zoukankan      html  css  js  c++  java
  • 选择排序

    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;
    }
    }
  • 相关阅读:
    Java的常量接口思考,项目中的常量是放在接口里还是放在类里呢?
    有些时候会看到url参数上出现%BF之类
    mysql 取整
    MySQL使用判断
    java 获得当前时间前指定几个小时的时间?
    SVN集成compare4比较软件
    JAVA去重
    连接SQL常见问题
    springMVC项目部署 服务器启动spring容器报错bean未从类加载器中找到
    Java 中Timer和TimerTask 定时器和定时任务使用的例子
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/11029305.html
Copyright © 2011-2022 走看看