يتم استخدام خوارزميات الترتيب والختلط على نطاق واسع وتحتاج إلى إتقان. من أجل خفض العتبة ، تركز هذه المقالة بشكل أساسي على منطق وبساطة الخوارزمية ، ولكنها لا تهتم بكفاءة الخوارزمية. الجمع بين التنفيذ في الكتب عبر الإنترنت واحتياجاتهم الخاصة ، هناك أربعة أهداف هنا:
1. الترتيب الكامل لجميع العناصر: الترتيب الكامل لـ AB هو AB ، BA (المرتبط بالترتيب) ؛
2. مزيج كامل من جميع العناصر: مزيج كامل من AB هو A ، B ، AB (ترتيب غير ذي صلة) ؛
3. اكتشف ما هي مجموعات اختيار عناصر M بين عناصر N: مزيج من عنصرين في ABC هو AB ، AC ، BC ؛
4. اكتشف ما هي الترتيبات اللازمة لاختيار عناصر M بين عناصر N: الترتيبات اللازمة لاختيار عنصرين في ABC هما AB ، BA ، AC ، CA ، BC ، CB ؛
يمكن العثور على أنه بعد العثور على ترتيب اختيار عناصر M بين عناصر N ، نرتب فعليًا مجموعة العناصر (المصفوفات) المكونة من كل مجموعة بعد العثور على طريقة تركيبة لاختيار عناصر M بين عناصر N ، لذلك فهي وظيفة تجميع ، والأمثلة غير مدرجة. للحصول على الأهداف الثلاثة الأخرى ، راجع الكود:
PROBERS PRICALTINGLUSTIONDOUNTY HOLLANDER { / ** مزيج كامل من عناصر الصفيف* / مجموعة الفراغ الثابت (char [] char) {char [] subchars = new char [chars.length] ؛ // المصفوفات التي تخزن البيانات الفرعية // مشكلة التركيبة بأكملها هي تحديد عنصر واحد من جميع العناصر (المشار إليها باسم N) ، بالإضافة إلى مزيج من عنصرين ... بالإضافة إلى مجموع مجموعة العناصر n (int i = 0 ؛ i <chars.length ؛ ++ i) {final int m = i +1 ؛ مزيج (chars ، chars.length ، m ، subchars ، m) ؛ }} /*** تنفيذ مجموعة من العناصر n مع عناصر n. المبدأ هو كما يلي: * حدد من الخلف إلى الأمام ، حدد الموضع I ، ثم حدد M-1 في الأول I-1. * على سبيل المثال: يتم تحديد 3 عناصر من 1 ، 2 ، 3 ، 4 ، 5. * 1) بعد اختيار 5 ، ثم اختيار 2 في أول 4 ، واختيار 2 في أول 4 مشكلات فرعية أخرى ، فقط متكررة ؛ * 2) إذا لم تقم بتضمين 5 ، فحدد 4 مباشرة ، ثم حدد 2 في أول 3 ، واختيار 2 في الثلاثة الأولى هو مشكلة فرعية أخرى ، فقط متكررة ؛ * 3) إذا لم تقم بتضمين 4 ، حدد 3 مباشرة ، ثم حدد 2 في أول 2 ، وهناك اثنان فقط في أول 2. * النظر في الاتجاه الرأسي ، 1 و 2 و 3 يحدث ليكون حلقة ، والقيمة الأولية هي 5 ، والقيمة النهائية هي m. * بالنظر إلى الاتجاه الأفقي ، هذه المشكلة هي عودية من M-1 في الأول I-1. */مجموعة الفراغ الثابتة (char [] chars ، int n ، int m ، char [] subchars ، int subn) {if (m == 0) {// export for (int i = 0 ؛ i <subn ؛ ++ i) {system.out.print (subchars [i]) ؛ } system.out.println () ؛ } آخر {for (int i = n ؛ i> = m ؛ - i) {// select subchars [m - 1] = chars [i - 1] ؛ // حدد مجموعة (chars ، i - 1 ، m - 1 ، subchars ، subn) ؛ // SELECT M-1 من الأول I-1 للتكرار}}}}/ ** التقليب الكامل لعناصر الصفيف*/ تقليب الفراغ الثابت (char [] chars) {التقليب (chars ، 0 ، chars.length-1) ؛ } /** بطولات فرعية في المصفوفة من الفهرس ، تبدأ في فهرسة End في المشاركة في التقليب الكامل* /التقليب الفراغ الثابت (char [] chars ، int ، int end) {if (start == end) {// الخروج هو عندما يتم ترك الحرف الأخير فقط لـ (int i = 0 ؛ i <chars.length ؛ ++ i) {system.print. } system.out.println () ؛ } else {for (int i = start ؛ i <= end ؛ ++ i) {// يتم إصلاح كل حرف إلى الأول if (canswap (chars ، chars ، i)) {// deduplicate swap (chars ، chars ، i) ؛ // تبادل التبادل (chars ، ابدأ + 1 ، نهاية) ؛ // تجد بشكل متكرر التقليب الكامل لمبادلة المباراة الفرعية (chars ، begin ، i) ؛ // restore}}}}} تبديل الفراغ الثابت (char [] chars ، int from ، int to) {char temp = chars [from] ؛ chars [من] = chars [إلى] ؛ chars [to] = temp ؛ } static boolean canswap (char [] chars ، int int ، int end) {for (int i = begin ؛ i <end ؛ ++ i) {if (chars [i] == chars [end]) {return false ؛ }} إرجاع صحيح ؛ } public static void main (string [] args) {final char [] chars = new char [] {'a' ، 'b' ، 'c'} ؛ التقليب (chars) ؛ System.out.println ("============================================================ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.