国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java語言字典序排序算法解析及代碼示例

Java語言字典序排序算法解析及代碼示例

2021-03-17 13:06御風逍遙 Java教程

這篇文章主要介紹了Java語言字典序排序算法解析及代碼示例,具有一定借鑒價值,需要的朋友可以參考下

字典序法就是按照字典排序的思想逐一產生所有排列。

在數學中,字典或詞典順序(也稱為詞匯順序,字典順序,字母順序或詞典順序)是基于字母順序排列的單詞按字母順序排列的方法。 這種泛化主要在于定義有序完全有序集合(通常稱為字母表)的元素的序列(通常稱為計算機科學中的單詞)的總順序。

對于數字1、2、3......n的排列,不同排列的先后關系是從左到右逐個比較對應的數字的先后來決定的。例如對于5個數字的排列 12354和12345,排列12345在前,排列12354在后。按照這樣的規定,5個數字的所有的排列中最前面的是12345,最后面的是 54321。

例如,由1,2,3組成的所有排列,從小到大的依次為:

123,132,213,231,312,321
由1,2,3,4組成的所有排列:

1234, 1243, 1324, 1342, 1423, 1432,
2134, 2143, 2314, 2341, 2413, 2431,
3124, 3142, 3214, 3241, 3412, 3421,
4123, 4132, 4213, 4231, 4312, 4321.

首先要對給定的字符集中的字符規定了一個先后關系,在此基礎上按照順序依次產生每個排列。

[例]字符集{1,2,3},較小的數字較先,這樣按字典序生成的全排列是:123,132,213,231,312,321。

生成給定全排列的下一個排列,所謂一個的下一個就是這一個與下一個之間沒有字典順序中相鄰的字符串。這就要求這一個與下一個有盡可能長的共同前綴,也即變化限制在盡可能短的后綴上。

后一個排列與前一個排列之間存在一定的關系,后一個排列的求解過程如下:

設有排列(p)=2763541,按照字典式排序,它的下一個排列是什么?

2763541 (找最后一個正序35)
2763541 (找3后面比3大的最后一個數4)
2764531(交換3,4的位置)
2764135 (把4后面的5,3,1反轉)

下面給出求 p[1…n] 的下一個排列的描述:

求 i = max{j | p[j – 1] < p[j]} (找最后一個正序)
求 j = max{k| p[i – 1] < p[k]} (找最后大于 p[i – 1] 的)
交換 p[i – 1] 與 p[j]得到 p[1] … p[i-2] p[j] p[i] p[i+1] … p[j-1] p[i-1] p[j+1] … p[n]
反轉 p[j] 后面的數得到 p[1] …p[i-2] p[j] p[n] … p[j+1] p[i-1] p[j-1] … p[i]

代碼實現如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
private static int[] getPermutation(int[] in) {
    int[] ns = in;
    int base = -1;
    for (int i=ns.length-1; i>=1; i--) {
        if (ns[i-1] < ns[i]) {
            base = i-1;
            break;
        }
    }
    //已經到最后一個排列了 全部是逆序
    if (base == -1) return null;
    int bigger=0;
    for (int i=ns.length-1; i>=base; i--) {
        if (ns[i] > ns[base]) {
            bigger = i;
            break;
        }
    }
    //   System.out.println(bigger);
    swap(ns, base, bigger);
    reverse(ns,base+1,ns.length-1);
    return ns;
}
private static void reverse(int[] ns, int i, int j) {
    int left = i, right = j;
    while (left < right) {
        swap(ns, left, right);
        left++;
        right--;
    }
}
private static void swap(int[] ns, int base, int bigger) {
    int temp = ns[base];
    ns[base] = ns[bigger];
    ns[bigger] = temp;
}

總結

以上就是本文關于Java語言字典序排序算法解析及代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/zhhtao89/article/details/50394347

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日本一区二区在线看 | 午夜视频网 | 中文字幕av网 | 成人免费视频在线观看 | 日韩成人| 精品色 | 日本久久久久久久久久久久 | 亚洲国产成人av好男人在线观看 | 五月婷伊人 | 一级欧美| 一级片在线播放 | 亚洲不卡视频 | av一区二区在线观看 | 久久久精品一区二区 | 一区二区不卡视频 | 免费观看在线毛片 | 一级一片免费 | 日本高清中文字幕 | 欧美成人高清视频 | 这里只有精品国产 | 伦一区二区三区中文字幕v亚洲 | 99re免费视频精品全部 | 一区二区三区久久久久久 | 91免费在线看 | 成人午夜电影网 | 亚洲精品久久久久久久久久久久久 | 亚洲视频在线一区 | 国产日韩精品一区 | 久久久精 | 国产精品成人一区二区三区 | 91精品国产综合久久久久久丝袜 | 成人免费视频播放 | 青草福利| 欧美中文在线 | av片在线观看 | 特一级毛片 | 国产精品一区二 | av一区二区在线观看 | 免费岛国片| 欧美日韩精品一区二区三区 | 久久久中文字幕 |