久久亚洲精品成人_国产精品欧美综合亚洲_亚洲va天堂va欧美ⅴa在线_91色视频在线观看_久久影院亚洲_一级黄色片播放_日韩av在线一区_精品一区二区在线看_老头吃奶性行交视频_日韩免费高清视频_天天操天天爽天天干_日本欧美在线视频

首頁 > 編程 > Java > 正文

Java 位圖法排序的使用方法

2019-11-26 16:11:50
字體:
來源:轉載
供稿:網友

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

復制代碼 代碼如下:

/**
     * 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);
        }
    }


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

比如{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 代碼嘗試下,效率果然不錯:

復制代碼 代碼如下:

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");
    }
}

運行時間:

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


如果有重復數據,可以修改下:
復制代碼 代碼如下:

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");
    }
}


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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲成人精品在线| 久草视频手机在线观看| 久久精品欧美一区二区| 欧美激情视频在线免费观看 欧美视频免费一 | 久久精品三级| 青青草原在线免费观看| 精品无码国产一区二区三区51安| 日av中文字幕| 男女裸体影院高潮| 日本亚洲导航| 国产精品一区在线观看| 狠狠干 狠狠操| 啦啦啦免费高清视频在线观看| 欧美午夜精品一区二区三区| 欧美另类videos| 视频一区二区三区中文字幕| 久久久久国产精品www| 国产91对白在线观看九色| 男人日女人的bb| 狠狠色伊人亚洲综合网站色| 成人黄色av播放免费| 一本在线高清不卡dvd| 成人区一区二区| 高清成人免费视频| 92看片淫黄大片欧美看国产片 | 亚洲 欧美 精品| 一本色道亚洲精品aⅴ| 日本手机在线视频| 国产a久久麻豆| 日韩暖暖在线视频| av网站在线观看不卡| 黄大色黄女片18免费| 欧美视频日韩视频在线观看| 91人妻一区二区| 精品无码久久久久| 成年人在线免费看片| 一级特黄曰皮片视频| 欧洲女同同性吃奶| 成人a视频在线观看| 国产精品视频一区二区三区,| 国产成人精品在线播放| 欧美日韩免费做爰视频| 欧美精品一区二区三区在线| 欧美特黄一级片| 精品无码在线观看| 欧美一区免费视频| 日韩理论片在线观看| 视频二区一区| 伊人久久青草| 国产黄色一级网站| 不卡中文字幕在线观看| 波多野结衣办公室双飞 | 欧美日韩亚洲综合在线| 在线播放91灌醉迷j高跟美女 | 91在线国产福利| 毛片在线视频观看| 日本一区二区三区久久久久久久久不 | 国产精品一区二区三区毛片淫片 | 日韩av无码一区二区三区不卡| 欧美激情日韩图片| 久久精品人人| 国产成人精品无码播放| 日韩欧美综合一区| 国产三级漂亮女教师| 你懂的网址一区二区三区| 国产日韩av一区二区| 日本人dh亚洲人ⅹxx| 久久精品最新地址| 国产精品一二三四| 欧美久久综合性欧美| 特黄视频免费看| 日韩精品久久久久久福利| 久久久www| 日本黄色动态图| 欧美日本精品一区二区三区| 7777精品伊人久久久大香线蕉 | 午夜久久久久久电影| 91精品人妻一区二区三区蜜桃欧美| 日韩综合中文字幕| 国产91精品一区二区麻豆网站| 日韩精品―中文字幕| 欧美丰满美乳xxx高潮www| www.av视频| 91大片在线观看| 福利一区视频在线观看| 国产香蕉视频在线| 午夜探花在线观看| 欧美一激情一区二区三区| 成人av免费播放| 九九九九免费视频| 久热99视频在线观看| 九九热99视频| yw.139尤物在线精品视频| 精品写真视频在线观看| 欧美做受喷浆在线观看| 亚洲欧美日韩国产一区二区三区| 久久精品99久久久| 色综合视频在线观看| 日韩在线免费高清视频| 久久精品人人做人人爽电影| 欧美日韩黄色一级片| 精品国产区在线| 久久午夜a级毛片| 久久精品亚洲乱码伦伦中文| 久久久久久激情| 公共露出暴露狂另类av| 日韩视频免费在线观看| 成人黄色av网站在线| 欧美三日本三级少妇99| 337p粉嫩大胆噜噜噜鲁| 国产精品v片在线观看不卡| 色狠狠综合天天综合综合| 精品一区二区三区免费视频| 特级西西人体高清大胆| 久久福利电影| 国产精品麻豆va在线播放| 久精品免费视频| 91在线视频免费观看| 亚洲激情一区二区| 亚洲人123区| 国产成人av网站| 中文字幕国产一区二区| 日韩精品福利视频| 免费a在线观看播放| 精品国产无码AV| 一区二区日韩av| 国内偷自视频区视频综合| 精品国偷自产在线视频| 欧美一区二区在线视频| 亚洲宅男天堂在线观看无病毒| 成人动漫av在线| 国产69精品久久久久毛片| 欧美亚洲国产一区二区三区va | 国产精品天天看| 日韩电影在线看| 精品少妇久久久| 神马久久久久久久久久久| 国产日韩欧美精品一区| 精品少妇一区二区三区在线播放 | 欧美日韩亚洲另类| 国产女人精品视频| 91精品国产高清91久久久久久 | 精品久久久久久中文字幕人妻最新| 性xxxxbbbb| 欧美另类变人与禽xxxxx| 91精品一区二区| 亚欧洲乱码视频| 成人一区在线观看| 日日狠狠久久偷偷四色综合免费| 国产96在线 | 亚洲| 亚洲图片小说视频| 欧美午夜视频一区二区| 成人国产精品av| 久久久久久国产精品无码| 国产**成人网毛片九色| 中文在线不卡视频| 香蕉视频网站入口| 久久天堂精品| 亚洲人成人99网站| 欧美日韩在线视频一区二区三区| 国产黄色小视频在线观看| 欧美老女人第四色| 亚洲欧洲日韩精品| 久草热在线观看| 在线观看91精品国产麻豆| 欧美日韩综合另类| 日韩国产成人在线| 欧美亚洲动漫精品| 亚洲欧美日韩精品综合在线观看 | 国产男男chinese网站| 国产婷婷精品av在线| 日韩av片电影专区| 疯狂揉花蒂控制高潮h| 91丨porny丨在线| 日韩av手机在线看| 国产一二三四视频| 亚洲老妇xxxxxx| 国产精品一区二区免费| 国产免费av一区二区| 日韩人在线观看| 色一情一乱一伦一区二区三区丨 | 亚洲一区二区自偷自拍| 久久久久国色av免费看影院| 国产精品免费一区二区三区都可以| 东京热无码av男人的天堂| 亚洲精品免费在线播放| 亚洲一区免费网站| 国产精品xxxx喷水欧美| 91精品国产色综合久久不卡蜜臀| 日韩伦理在线免费观看| 蜜臀久久99精品久久久久久9 | 亚洲伦理一区二区三区| 疯狂做受xxxx欧美肥白少妇| 久久人人九九| 男人天堂一区二区| 欧美成人亚洲成人| 91成年人网站| 色综合久久久久综合体| 妞干网这里只有精品| 日本aⅴ精品一区二区三区| 久久久久久中文字幕| chinese全程对白| 欧洲日韩一区二区三区| 97国产精东麻豆人妻电影 | 国产极品美女高潮无套久久久| av一区二区三区免费观看| 麻豆国产欧美一区二区三区| 97碰碰碰免费色视频| 久久久久久久黄色| 欧美一区二区黄| 亚洲免费一级视频| 成人欧美一区二区三区1314| 香蕉久久免费影视| 国产资源精品在线观看| 92看片淫黄大片欧美看国产片| 在线免费观看视频网站| 丝袜亚洲另类欧美重口| 欧美人禽zoz0强交| 日韩欧美一二区| 美女扒开腿免费视频| 欧美日韩在线视频首页| 天天摸天天碰天天添| 一级片中文字幕| 人妻av无码一区二区三区| 欧美亚洲免费在线一区| 午夜免费一区二区| 久久国产视频网| 91久久精品美女| 国产精品免费久久久久| 性色av一区二区三区| 国产又粗又猛视频| 国产一区在线播放| 欧美疯狂xxxx大交乱88av| 国产一区二区精品久久99| 波多野结衣精品久久| 精品一区二区精品| 青青在线视频免费观看| 精品女厕一区二区三区| 国产精品九九九九九| 亚洲毛片在线观看| 日韩精品一区二区亚洲av| 欧美在线一区二区视频| 久久国产夜色精品鲁鲁99| 中文精品无码中文字幕无码专区| 一区二区久久久| 国产精品嫩草av| 久久精品国产视频| 天天操天天干天天舔| 一区二区三区偷拍| 日韩欧美亚洲范冰冰与中字| 2019男人天堂| 日韩免费在线播放| 国产69精品久久777的优势| 国产高清精品在线观看| 日韩三区在线观看| 亚洲自拍偷拍另类| 一区国产精品| 一本大道久久a久久综合| 久久人人爽人人爽人人| 成人午夜一级二级三级| 国产情人综合久久777777| 亚洲成人精品在线播放| 日韩网站在线观看| 久久99国内精品| 一本岛在线视频| 中文字幕亚洲图片| 美女一区二区三区| 午夜免费福利在线| 深夜福利日韩在线看| 久久青草久久| 白嫩少妇丰满一区二区| 一道本无吗dⅴd在线播放一区| 手机看片福利在线| 日韩黄色短视频| 亚洲精品av在线| 免费观看毛片网站| 欧美精品自拍视频| 亚洲欧美色图片| 麻豆精品一区二区| 性久久久久久久久久久久久久| 久久91亚洲精品中文字幕| gogogo免费视频观看亚洲一| wwwwxxxx国产| 亚洲一区二区三区视频| 亚洲一区中文在线| 99精品在线播放| 欧美一级特黄aaaaaa在线看片| 日韩丝袜美女视频| 日韩成人午夜精品| 中文字幕乱妇无码av在线| 91av在线精品| 亚洲综合精品久久| 天天爱天天做天天爽| 一二三在线视频| 亚洲人成电影在线观看天堂色 | 日韩一区二区麻豆国产| 国产精品三区在线观看| 91精品国产一区二区| japanese国产| 午夜免费看视频| 欧美孕妇与黑人孕交| 一区二区三区免费| 做爰视频毛片视频| 日本男人操女人| 青青草原成人在线视频| 亚洲一区影音先锋| 免费在线不卡av| 成人3d动漫一区二区三区| 57pao精品| 色综合久久九月婷婷色综合| 亚洲精品成人电影| 亚洲精品20p| 国产成人自拍视频在线观看| 岛国av一区二区三区| 久久婷婷激情| 国产激情在线免费观看| 免费99视频| 亚洲石原莉奈一区二区在线观看| wwww国产精品欧美| 亚洲天堂五月天| 不卡av免费在线| 国产精品日本精品| 欧美色偷偷大香| 国产经典欧美精品| 精品午夜福利视频| 丁香啪啪综合成人亚洲 | 最新在线中文字幕| 九九热免费在线观看| 91美女福利视频高清| 欧美xxxxx牲另类人与| 久久综合色天天久久综合图片| 亚洲婷婷综合网| 国产精品中文久久久久久| 精品国产乱码一区二区三区四区| 精品福利二区三区| 欧美激情一区二区在线| 国产视频一区二区三| 风间由美一二三区av片| 日韩欧美亚洲日产国产| 欧美大片大片在线播放| 欧美三级电影一区| 97久久超碰国产精品| 亚洲天堂狠狠干| 日本天堂在线播放| 自拍视频一区二区三区| 国产xxx69麻豆国语对白| 亚洲第一天堂无码专区| 亚洲欧洲日本在线| 日韩精品一级二级 | 色综合久久综合| 国产成人av资源| 这里只有精品免费视频| 国产熟女高潮一区二区三区 | 成人免费a级片| 91精品综合久久| 日韩在线欧美在线| 欧美亚洲国产bt| 国产精品日日摸夜夜摸av| 午夜在线观看视频18| 国产成人免费观看视频 | 国产精品高潮呻吟久久av无限 | 久久久久久色| 久久久久人妻一区精品色欧美| 日本高清久久久| 亚洲砖区区免费| 成人在线中文字幕| 日韩视频亚洲视频| 欧美日本国产一区| 亚洲色图视频免费播放| 精品无码三级在线观看视频| 一二三区在线播放| 国产在线一卡二卡| 精品人妻在线视频| 国产精品沙发午睡系列| 欧美日韩综合精品| 91精品国产自产在线| 欧美激情18p| 亚洲精品影视在线观看| 欧美写真视频网站| 亚洲一区二区三区自拍| av电影在线观看完整版一区二区| 日本高清视频在线| 五月激情丁香网| 久久免费精彩视频| 亚洲综合欧美综合| 极品人妻一区二区| 日韩中文字幕免费在线| 久久人妻无码一区二区| 欧美久久久久久| 粉嫩av免费一区二区三区| 青青草精品毛片| 欧美黑人xxxⅹ高潮交| 在线观看国产成人av片| 亚洲国产精品99久久| 欧美乱妇一区二区三区不卡视频| 一区二区三区.www| 1024亚洲合集| 久久欧美中文字幕| 成人av电影在线网| 激情五月婷婷综合| 蜜桃视频在线观看一区二区| 亚洲欧美国产高清va在线播放| 中文字幕乱码人妻二区三区| 日本中文字幕免费观看| 欧美精品久久久久性色| 人妻无码一区二区三区免费| 素人fc2av清纯18岁| 一女三黑人理论片在线| 中文成人无字幕乱码精品区| 日本道中文字幕|