zoukankan      html  css  js  c++  java
  • 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);
        }
    }
  • 相关阅读:
    CodeForces
    CodeForces
    CodeForces 718C && HDU 3572 && Constellation
    CodeForces
    USACO 5.4 tour的dp解法
    10.22~10.28一周经典题目整理(meeting,BZOJ4377,POJ3659)
    codeforces 724D
    codeforces 724C
    hdu5909 Tree Cutting
    hdu5822 color
  • 原文地址:https://www.cnblogs.com/sunnyCx/p/8149900.html
Copyright © 2011-2022 走看看