日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁(yè) > 編程 > Java > 正文

Java 位圖法排序的使用方法

2019-11-26 16:11:50
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

java JDK里面容器類的排序算法使用的主要是插入排序和歸并排序,可能不同版本的實(shí)現(xiàn)有所不同,關(guān)鍵代碼如下:

復(fù)制代碼 代碼如下:

/**
     * Performs a sort on the section of the array between the given indices
     * using a mergesort with exponential search algorithm (in which the merge
     * is performed by exponential search). n*log(n) performance is guaranteed
     * and in the average case it will be faster then any mergesort in which the
     * merge is performed by linear search.
     *
     * @param in -
     *            the array for sorting.
     * @param out -
     *            the result, sorted array.
     * @param start
     *            the start index
     * @param end
     *            the end index + 1
     */
    @SuppressWarnings("unchecked")
    private static void mergeSort(Object[] in, Object[] out, int start,
            int end) {
        int len = end - start;
        // use insertion sort for small arrays
        if (len <= SIMPLE_LENGTH) {
            for (int i = start + 1; i < end; i++) {
                Comparable<Object> current = (Comparable<Object>) out[i];
                Object prev = out[i - 1];
                if (current.compareTo(prev) < 0) {
                    int j = i;
                    do {
                        out[j--] = prev;
                    } while (j > start
                            && current.compareTo(prev = out[j - 1]) < 0);
                    out[j] = current;
                }
            }
            return;
        }
        int med = (end + start) >>> 1;
        mergeSort(out, in, start, med);
        mergeSort(out, in, med, end);

        // merging

        // if arrays are already sorted - no merge
        if (((Comparable<Object>) in[med - 1]).compareTo(in[med]) <= 0) {
            System.arraycopy(in, start, out, start, len);
            return;
        }
        int r = med, i = start;

        // use merging with exponential search
        do {
            Comparable<Object> fromVal = (Comparable<Object>) in[start];
            Comparable<Object> rVal = (Comparable<Object>) in[r];
            if (fromVal.compareTo(rVal) <= 0) {
                int l_1 = find(in, rVal, -1, start + 1, med - 1);
                int toCopy = l_1 - start + 1;
                System.arraycopy(in, start, out, i, toCopy);
                i += toCopy;
                out[i++] = rVal;
                r++;
                start = l_1 + 1;
            } else {
                int r_1 = find(in, fromVal, 0, r + 1, end - 1);
                int toCopy = r_1 - r + 1;
                System.arraycopy(in, r, out, i, toCopy);
                i += toCopy;
                out[i++] = fromVal;
                start++;
                r = r_1 + 1;
            }
        } while ((end - r) > 0 && (med - start) > 0);

        // copy rest of array
        if ((end - r) <= 0) {
            System.arraycopy(in, start, out, i, med - start);
        } else {
            System.arraycopy(in, r, out, i, end - r);
        }
    }


看到編程珠璣上有一個(gè)很有趣的排序算法-位圖法其思想是用1位來(lái)表示[0~n-1]中的整數(shù)是否存在。1表示存在,0表示不存在。即將正整數(shù)映射到bit集合中,每一個(gè)bit代表其映射的正整數(shù)是否存在。

比如{1,2,3,5,8,13}使用下列集合表示:

  0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0

偽代碼如下:

for (i  in  [0~n-1])  bit[i] = 0;
for(i  in [0~n-1])
  if (i in input file)     
    bit[i] = 1

for(i  in [0~n-1])
  if(bit[i] == 1) 
    output i

用java 代碼嘗試下,效率果然不錯(cuò):

復(fù)制代碼 代碼如下:

public class javaUniqueSort {
    public static int[] temp = new int[1000001];
    public static List<Integer> tempList = new ArrayList<Integer>();
    public static int count;

    public static void main(final String[] args) {
        List<Integer> firstNum = new ArrayList<Integer>();
        List<Integer> secondNum = new ArrayList<Integer>();

        for (int i = 1; i <= 1000000; i++) {
            firstNum.add(i);
            secondNum.add(i);
        }

        Collections.shuffle(firstNum);
        Collections.shuffle(secondNum);

        getStartTime();
        Collections.sort(firstNum);
        getEndTime("java sort run time  ");

        getStartTime();
        secondNum = uniqueSort(secondNum);
        getEndTime("uniqueSort run time ");

    }

    public static List<Integer> uniqueSort(final List<Integer> uniqueList) {
        javaUniqueSort.tempList.clear();
        for (int i = 0; i < javaUniqueSort.temp.length; i++) {
            javaUniqueSort.temp[i] = 0;
        }
        for (int i = 0; i < uniqueList.size(); i++) {
            javaUniqueSort.temp[uniqueList.get(i)] = 1;
        }
        for (int i = 0; i < javaUniqueSort.temp.length; i++) {
            if (javaUniqueSort.temp[i] == 1) {
                javaUniqueSort.tempList.add(i);
            }
        }

        return javaUniqueSort.tempList;
    }

    public static void getStartTime() {
        javaShuffle.start = System.nanoTime();
    }

    public static void getEndTime(final String s) {
        javaShuffle.end = System.nanoTime();
        System.out.println(s + ": " + (javaShuffle.end - javaShuffle.start) + "ns");
    }
}

運(yùn)行時(shí)間:

java sort run time  : 1257737334ns
uniqueSort run time : 170228290ns
java sort run time  : 1202749828ns
uniqueSort run time : 169327770ns


如果有重復(fù)數(shù)據(jù),可以修改下:
復(fù)制代碼 代碼如下:

public class javaDuplicateSort {
    public static List<Integer> tempList = new ArrayList<Integer>();
    public static int count;

    public static void main(final String[] args) {
        Random random = new Random();
        List<Integer> firstNum = new ArrayList<Integer>();
        List<Integer> secondNum = new ArrayList<Integer>();

        for (int i = 1; i <= 100000; i++) {
            firstNum.add(i);
            secondNum.add(i);
            firstNum.add(random.nextInt(i + 1));
            secondNum.add(random.nextInt(i + 1));
        }
        Collections.shuffle(firstNum);
        Collections.shuffle(secondNum);

        getStartTime();
        Collections.sort(firstNum);
        getEndTime("java sort run time  ");

        getStartTime();
        secondNum = uniqueSort(secondNum);
        getEndTime("uniqueSort run time ");

    }

    public static List<Integer> uniqueSort(final List<Integer> uniqueList) {
        javaDuplicateSort.tempList.clear();
        int[] temp = new int[200002];
        for (int i = 0; i < temp.length; i++) {
            temp[i] = 0;
        }
        for (int i = 0; i < uniqueList.size(); i++) {
            temp[uniqueList.get(i)]++;
        }
        for (int i = 0; i < temp.length; i++) {
            for (int j = temp[i]; j > 0; j--) {
                javaDuplicateSort.tempList.add(i);
            }
        }

        return javaDuplicateSort.tempList;
    }

    public static void getStartTime() {
        javaShuffle.start = System.nanoTime();
    }

    public static void getEndTime(final String s) {
        javaShuffle.end = System.nanoTime();
        System.out.println(s + ": " + (javaShuffle.end - javaShuffle.start) + "ns");
    }
}


這種算法還是有很明顯的局限性的,比如說(shuō)要知道數(shù)據(jù)中最大的數(shù)值,更重要的是數(shù)據(jù)的疏密程度,比如說(shuō)最大值為1000000而要數(shù)組大小只有100,那么效率會(huì)下降的非常明顯。。。。。但是,使用位圖法進(jìn)行排序,確實(shí)讓人眼前一亮。位圖法通常是用來(lái)存儲(chǔ)數(shù)據(jù),判斷某個(gè)數(shù)據(jù)存不存在或者判斷數(shù)組是否存在重復(fù) 。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
亚洲欧美中文字幕| 午夜影院在线观看欧美| 99久久久精品免费观看国产| 国产在线欧美日韩| 亚洲尤物av| 日韩欧美在线精品| 欧美日韩999| 国产色在线视频| 天天综合天天综合| 一区二区视频国产| 免费在线播放av| 日本亚洲欧美天堂免费| 国产香蕉免费精品视频| 国产在成人精品线拍偷自揄拍| www日韩欧美| 伊人中文字幕在线观看| 亚州黄色一级| 色综合久久六月婷婷中文字幕| 久久手机免费观看| 日韩欧美中文第一页| 欧美久久在线| 日韩视频一区二区在线观看| 国产一卡2卡3卡4卡网站免费| 亚洲欧美久久234| 亚洲欧洲日韩在线| 一二三区精品视频| 日本免费看黄| 中文字幕在线视频久| 在线中文免费视频| 日韩午夜中文字幕| 国产资源在线观看| 国产在线黄色片| 国产亚洲二区| 精品一区二区三区中文字幕在线| 最近高清中文在线字幕在线观看1| 国产福利在线播放| 欧美一级在线免费| 国产福利一区二区在线精品| 婷婷精品视频| 一区二区三区精品久久久| 91日韩欧美| 欧美在线视频二区| 欧美日韩亚洲国内综合网俺| 高清1区2区| 国产拍揄自揄精品视频麻豆| 精品欧美日韩精品| 在线视频三区| 日韩精品在线私人| 亚洲一区中文字幕在线观看| 91精品免费在线观看| 午夜一区二区三区免费| 欧美激情一区二区在线| 91久久久久| 国产亚洲福利| 日韩欧美一二三区| 欧美中文字幕视频| 中文字幕在线播放一区| 国产福利一区在线观看| av午夜在线| 中文字幕在线视频第一页| 日韩欧美亚洲国产| 99视频在线看| 欧美日韩国产高清| 午夜亚洲一区| 久久精品日韩欧美| 久久久精品网| 欧美久久久网站| 一级片在线播放| 欧美日韩亚洲不卡| 欧美在线日韩在线| 欧美高清视频一区二区三区| 中文字幕伊人| 最近高清中文在线字幕在线观看| 欧美日韩国产影片| 在线观看区一区二| 91麻豆视频网站| 中文 欧美 日韩| 日韩 欧美 亚洲| 欧美日韩国产区| 日韩精品在线观看视频| 日韩精品视频在线| 欧美日韩人人澡狠狠躁视频| 国产乱码在线观看| 免费在线播放av| 中文字幕精品亚洲| 欧美日韩亚洲国内综合网俺| 欧美日韩在线不卡视频| 欧美日韩高清不卡| 久久91精品视频| 在线手机中文字幕| 国产一卡二卡3卡4卡四卡在线| 日韩精品欧美在线| 午夜国产在线视频| 在线亚洲人成| 欧美日韩高清在线一区| 欧美日韩亚洲第一| 欧美日韩国产一区中文午夜| 国产激情久久久| 久久久91精品| 欧美日韩视频网站| 欧美日韩中文字幕综合视频| 国产小视频免费在线网址| 大香一本蕉伊线亚洲网| 九一久久久久久| 国产黄色在线| 国产成人精品999在线观看| 一级特黄大欧美久久久| 国产调教精品| 欧美高清视频一区二区三区| 精品亚洲综合| 欧美中文字幕在线视频| 综合激情国产一区| 亚洲欧美999| 日韩精品在线视频观看| 亚洲黄色片在线观看| 国产在线小视频| 亚洲一区激情| 亚洲福利精品视频| 日韩av一区在线| 亚洲欧美伊人| 欧美一级日韩不卡播放免费| 91精品国产色综合久久不卡蜜臀 | 久久精品免费在线观看| 国产在线看一区| 91麻豆精品在线| 日韩欧美综合在线视频| 日本а中文在线天堂| 最新中文字幕在线播放 | 国产欧美日韩精品在线| 国产日产一区二区三区| 国产视频三级在线观看播放| 精品欧美不卡一区二区在线观看| 色妇色综合久久夜夜| 午夜少妇久久久久久久久| 久久精品在线免费观看| 亚洲黄色片在线观看| 日韩精品在线免费看| 精品亚洲永久免费| 亚洲中文字幕一区| 一区二区视频免费看| 日韩午夜一区| 偷窥国产亚洲免费视频| 伊人www22综合色| 中文字幕精品视频在线| 日韩三级视频在线看| 免费在线视频一区二区| 国产在线www| 国产高清一区| 中文字幕最新精品| 国产欧美日韩在线观看| aaa欧美日韩| 精品亚洲综合| 亚洲女人天堂色在线7777| 国产 中文 字幕 日韩 在线| 天天综合色天天| 国内精品不卡| 91精品视频在线| 黄色视屏免费在线观看| 黄色国产网站在线播放| 最近中文字幕在线中文高清版| 国产欧美 在线欧美| 日韩欧美综合| 中文 欧美 日韩| 日韩视频1区| www.尤物.com| 欧美三级免费观看| 日韩高清不卡一区| 国产免费一级| 久久久99免费| 国产成人精品999| 日韩高清在线不卡| 不卡一区二区三区视频| 精品国产99久久久久久| 国产真实乱子伦精品视频| 粉嫩喷白浆久久| 日韩中文字幕亚洲| 国产日韩av一区| 欧美日韩一级黄| 中文字幕一区免费| 欧美日韩在线不卡| 国内精品99| 国产在线www| 日本国产在线视频| 亚洲最大黄色| 亚洲高清不卡一区| 欧美,日韩,国产在线| 最近中文字幕在线中文视频| 1024国产在线| av亚洲免费| 在线精品视频免费播放| 在线一区二区三区精品| 欧美色欧美亚洲高清在线视频| 交视频在线观看国产| 91精品国产入口| 国产男女av| 国产在线观看91| 日韩av一区在线| 天堂√8在线中文| 蜜桃视频一日韩欧美专区| 亚洲羞羞网站| 亚洲一区在线视频观看| 精品久久久三级| 日韩中文字幕在线播放| www.狠狠干| 欧美日韩免费精品| 亚洲最大黄色| 在线欧美日韩精品| 搞黄在线观看| 91精品国产综合久久精品| 久久夜色精品国产欧美乱极品 | 中文字幕欧美在线| 成人xxxx| 中文网丁香综合网| 精品一二三区| 日韩免费看网站| 亚洲综合中文字幕在线| 日韩欧美中文字幕视频| 日韩a一区二区| 欧美日韩中文字幕一区| 日韩精品一页| 精品中文字幕视频| 五月天久久比比资源色| 国产羞羞视频在线播放| 日韩精品视频在线观看免费| 国产成免费视频| 国产乱国产乱300精品| www日韩欧美| 欧美日韩成人综合| 91久久中文| 99久久婷婷| 成人久久久久| 亚洲视频在线观看三级| 欧美日韩精品免费看| 日韩不卡一区二区| 91精品在线免费| 刘玥91精选国产在线观看| 91精品国产综合久久福利| 视频一区二区精品的福利| 欧美日韩精品中文字幕| 中文字幕精品视频在线| 在线看欧美日韩| 欧美日韩91| 久久精品久久久久| 国产手机视频一区二区| 蜜桃久久av| 日韩精品视频网| 婷婷中文字幕一区三区| 国产在线观看91| 欧美国产中文| 亚洲高清免费一级二级三级| 欧美日韩国产在线| 91久久精品在线| 久久久精品免费免费| 日韩不卡在线观看| 日韩中文字幕观看| 蜜臀国产一区| 日本不卡高清视频一区| 精品国产99久久久久久| 亚洲综合在线中文字幕| 欧美日韩中文字幕综合视频| 日韩在线观看精品| 欧美日韩亚洲综合| 欧美日韩国产免费观看| 亚洲欧美日本国产专区一区| 国产高清大尺度一区二区不卡| 中文字幕成人乱码在线电影| 日韩美女中文字幕| 亚洲综合在线小说| 韩国一区二区av| 国产在成人精品线拍偷自揄拍| 日韩欧美一卡二卡| 久久福利视频一区二区| av中文天堂在线| 欧美一级免费观看| 午夜视频在线观看一区| 一区二区在线高清视频| 成人精品视频一区| 日韩在线视频一区二区三区| 日韩精品丝袜在线| 91久久中文| 亚洲欧美中文字幕在线观看| 久久精品免费看| 在线中文免费视频| 亚洲日产av中文字幕| 中文字幕在线观看视频www| 日韩精品在线播放| 欧美日韩精品在线| 亚洲国产欧美日韩精品| 欧美日韩国产在线| 国产欧美日韩成人| 日韩手机在线观看视频| 免费看日韩精品| 欧美高清视频一区二区三区| 国产亚洲人成a一在线v站| 国产999在线观看| 中文字幕亚洲乱码| 国产区在线看| 国产午夜精品视频| 日韩国产一区三区| 精品中文字幕视频| 国产一级片网站| 日本视频久久久| 精品日韩一区二区三区免费视频| 91精品视频国产| 在线观看av的网站| 日韩欧美在线看| www.三级.com| 中文字幕精品一区二| 伊人精品视频| 中文字幕日韩国产| 91精品在线免费| 日韩在线一区二区视频| 欧美日韩性视频一区二区三区| 欧美日韩成人综合| 91极品视频在线观看| 蜜臀久久精品| 91精品在线观看入口| 亚洲视频一二三四| 欧美不卡视频一区发布| 欧美日韩久久久| 久久99久久久久久久噜噜| 日韩欧美一级二级三级久久久| www.三级.com| 欧美日韩夫妻久久| 国产黄色精品| 日韩精品在线第一页| 欧美日韩中文字幕精品| 在线看的av| 男人的天堂网av| 日韩中文字幕二区| 91精品在线视频观看| 国产在线看一区| 欧美乱大交xxxxx免费| 91久久在线| 国产1卡2卡三卡四卡网站| 色综合天天综合网天天狠天天| 欧美日韩免费高清| 中文字幕日韩第一页| 最近中文字幕日韩精品| 日韩中文字幕91| lutube成人福利在线观看| 久久久精品福利| 精品成人久久久| 日韩在线视频网| 国内精品不卡| 在线观看一区| 中文字幕欧美日韩| 国产黄色在线| 国产欧美 在线欧美| 精品熟女一区二区三区| 国产在线导航| 欧美sm一区| 一级日韩一级欧美| 欧美va亚洲va日韩∨a综合色| 精品国产欧美日韩| 中文字幕在线看精品乱码| 精品播放一区二区| 欧美日韩一区二区在线视频| 国产在线观看色| 亚洲区中文字幕| 精品国内自产拍在线视频| 精品免费久久久| 日韩一级网站| 亚洲人成欧美中文字幕| 欧美久久久久久蜜桃| 中文字幕不卡三区| 国产高清不卡av| 一二三区精品视频| 1区不卡电影| 欧美日韩成人综合| 国产第一页在线播放| 欧美性极品xxxx做受| 中文字幕99| 欧美专区中文字幕| 91久久在线| 亚洲午夜av| 91精品国产欧美日韩| 国产婷婷精品| 日韩欧美在线综合| 国产欧美综合视频| 日韩欧美不卡在线| 精品午夜av| 最近中文字幕在线中文高清版| 91精品国产91| 欧美1234区| 欧美日韩一二| 国产综合成人久久大片91| 亚洲社区在线| 日韩在线高清| 欧美日韩国产综合视频在线观看| 在线一区av| 国产91大片| av丝袜在线| 国产一区日韩| 国产视频中文字幕| 中文字幕日韩高清| 欧美日韩国产页| 国产一区在线精品| 精品日韩av一区二区| 国产丝袜欧美中文另类|