• 2.1 shuffle sort(洗牌)


    1.目的:将数组以随机的顺序重新排序,类似洗牌的过程

    2.用途用于快速排序或者任何以划分为基础的排序中,目的是减少最坏可能性发生的概率。

    3.想法1:给数组的每一个元素产生一个随机的数字作为键,然后使用排序算法,排列数字,即可以完成shuffling

       缺点:需要排序的开销

    4.想法2:在第i次循环,在0到i之间均匀随机的取整数r,然后交换a[i]和a[r]

       可以做到在线性时间里完成shuffling

    package com.cx.sort;
    
    public class Shuffling {
        public static void sort(Comparable[] a) {
            int N=a.length;
            for(int i=1;i<N;i++) {
                //第i次迭代,随机找r
                int r=(int)(Math.random()*(i+1));
                exch(a, i, r);
            }
        }
        
        private static boolean less(Comparable v,Comparable w) {
            return v.compareTo(w)<0;
        }
        
        private static void exch(Comparable[] a,int i ,int j ) {
            Comparable t=a[i];
            a[i]=a[j];
            a[j]=t;
        }
        private static void show(Comparable[] a) {
            for(int i=0;i<a.length;i++) {
                System.out.print(a[i]+" ");
                
            }
            System.out.println();
        }
        public static void main(String[] args) {
            String a[]= {"s","o","r","t","e","x","a","m","p","l","e"};
            show(a);
            sort(a);
            show(a);
        }
    }
  • 相关阅读:
    sql server 2008 安装过程与创建建sql server登录用户
    Angularjs之controller 和filter(四)
    Angularjs之表单实例(三)
    antlr应用
    antlr4笔记(转)
    go升级版本
    go安装依赖包
    tsar
    java纤程
    HighLevelRestApi管理ES
  • 原文地址:https://www.cnblogs.com/sunnyCx/p/8149900.html
Copyright © 2020-2023  润新知