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);
        }
    }
  • 相关阅读:
    什么是模块化及其优点是什么
    oop的三大特性和传统dom如何渲染
    MVC和MVVM的差别
    SpringMVC实例及注解(二)
    Spring MVC实例创建(一)
    Mybatis联合查询(一)
    Mybatis参数传递及返回类型
    Mybatis实例增删改查(二)
    Mybatis实例及配置(一)
    SpringMVC
  • 原文地址:https://www.cnblogs.com/sunnyCx/p/8149900.html
Copyright © 2011-2022 走看看