字典排序思路見下圖
//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...