2個和字典排序相關函式 字典排序演算法實現

2021-09-16 21:48:26 字數 2252 閱讀 8108

字典排序思路見下圖

//lexicographic_permute 字典排序演算法

#includeusing namespace std;

//判斷最後乙個排列,是否存在 2個元素是公升序的, 並記錄最右公升序左邊那個數的位置

//比如:(1 5 2 6 3) 公升序(<1,5>、<2 ,6>),記錄 2所在位置 loc = 2

int judge_increase(int r, int n);

//找出 > r[loc] 的最大值所在位置,從loc後面查詢

//上例:3 > r[2] = 2, 故 最大索引值, j = 4

int check_bigger_than_loc(int r, int loc, int n);

//反序操作 將r 的first 到 end 之間的元素反向

void turn_permute(int r, int first, int end); \

//準備好後,字典排序

void lexicographic_permute(int n);

int main()

return 0;

}int judge_increase(int r, int n)

}return loc;

}int check_bigger_than_loc(int r, int loc, int n)

}return j;

}void turn_permute(int r, int first, int end)

}//奇數個

else

}}void lexicographic_permute(int n)

while ((i = judge_increase(r, n)) != -1)

cout << endl;}}

結果展示

c函式解釋

函式簡介

介紹兩個和字典排序相關函式

next_permutation prev_permutation

bool next_permutation(iterator start, iterator end)

查詢下乙個比當前排列的排列,若存在返回true

引數表示用乙個資料的一部分生成排列

prev_permutation查詢下乙個比當前排列的排列

一旦呼叫函式,若存在下一排列,則,陣列排列順序將會改變

比如:r[5]= 看**演示

標頭檔案#include

執行過程

; cout << "原陣列:\t ";

printf_r(r);

next_permutation(r, r + 5);//注意是+5,不是+4;

cout << "now陣列:\t";

printf_r(r);

prev_permutation(r, r + 5);

cout << "now陣列:\t";

printf_r(r);

next_permutation(r + 1, r + 4);

cout << "now陣列:\t";

printf_r(r);

prev_permutation(r + 1, r + 4);

cout << "now陣列:\t";

printf_r(r);

return 0;

}結果展示

字典排序相關

一 字典排序的規則 兩個字串 stra a1 a2 am strb b1 b2 bn 1.如果其中乙個字串是另乙個字串的子串,那麼子串要小於另乙個字串 2.如果這兩個字串沒有子串的關係,那麼從前往後遍歷stra和strb,找到第一對不相同的字元ai和bi,如果aibi,則stra大於strb 3.具...

python 字典和巢狀字典排序

正常字典的排序我們都知道,像這樣 a b sorted a.items key lambda x x 1 就會輸出如下結果 101,0 100,1 102,2 那如果是巢狀字典呢,比如 a 101 102 實際上是類似的,我們只要理解了上面這個key的含義,lambda可以理解為乙個函式,輸出為x ...

Python dict字典排序和多條件排序

利用lambda實現排序 要實現多條件排序,只需要依次指定排序的標準,具體實現如下 counter counter list sorted counter.iteritems key lambda x x 1 reverse true 根據value的大小排序 你 3 是 1 不是 1 counte...