تقدم هذه المقالة بشكل أساسي كيف تحقق Java ثمانية خوارزميات فرز شائعة الاستخدام: إدراج الفرز ، فرز الفقاعات ، اختيار الفرز ، فرز التل ، الفرز السريع ، فرز الاندماج ، ترتيب التراص ، وفرز قاعدة LST.
تصنيف
1) أدخل الفرز (تم إدخاله مباشرة ، فرز التل)
2) تبادل الفرز (فرز الفقاعات ، فرز سريع)
3) حدد الفرز (حدد مباشرة الفرز والفرز المكدح)
4) دمج الفرز
5) التوزيع والفرز (الفرز الأساسي)
المساحة المساعدة المطلوبة هي الأكثر: المساحة الأكثر مساعدة للاندماج والفرز: أسرع سرعة رعاية لترتيب التراص: فرز سريع
غير مستقر: فرز بسرعة ، فرز التل ، فرز مكدسة.
لنلقي نظرة على العلاقة بين 8 فرز:
1. إدراج مباشرة
(1) الأفكار الأساسية: من بين المجموعات التي سيتم فرزها ، على افتراض (N-1) [n> = 2] الرقم بالفعل صف
بالترتيب ، يتم إدراج رقم NN الآن في الطلب السابق ، بحيث يكون هذا الرقم n
هو أيضا في النظام. يتم توزيع هذا مرارًا وتكرارًا حتى يكون الترتيب بأكمله في النظام.
(2) مثال
(3) أدرك مع جافا
حزمة com.njue ؛ 17،18،23،34،15،35،25،53،51} ؛ temp = a [i] ؛ اختبار ؛} لـ (int i = 0 ؛ i <a.length ؛ i ++) {system.out.println (a [i]) ؛}}}}}2. نوع التل (الحد الأدنى للفرز الإضافي)
(1) الأفكار الأساسية: يتم تقسيم عدد المجموعات التي سيتم فرزها بواسطة الخوارزمية إلى عدة مجموعات وفقًا لعدد D (N/2 ، N كما يتم فرزها). وفرزها ، ثم استخدم زيادة أصغر (D/2) لتجميعها ، ثم إدراج الفرز مباشرة في كل مجموعة. عندما يتم تقليل الزيادة إلى 1 ، يتم إدخال النوع مباشرة ويتم إكمال النوع.
(2) مثال:
(3) أدرك مع جافا
PublicClass Shellsort {publicshellsort () {int a [] = {1،54،3،78،34،12،45،56،100} ؛ .ceil (d1/2) ؛ ) {int j = id ؛ j+d] = temp ؛}} if (d == 1) {break ؛} for (int i = 0 ؛ i <a.length ؛ i ++) {system.out.println (a [i]) ؛} }}3. اختيار بسيط للفرز
(1) الأفكار الأساسية: في مجموعة يتم فرزها ، حدد أصغر عدد من عدد الأرقام والموقف الأول ؛
ثم ابحث عن أصغر عدد الموضع الثاني في الأرقام المتبقية ، بحيث تتم مقارنة الحلقة بالرقم الأخير من الرقم الأخير والرقم الأخير.
(2) مثال:
(3) أدرك مع جافا
الفئة العامة SelectSort {Public SelectSort () {int a [] = {1،54،3،78،34،12،45} ؛ ) {int j = i+1 ؛ J] ؛ أنا] )؛}}4. فرز كومة
(1) الأفكار الأساسية: فرز التعبئة هو اختيار على شكل شجرة للفرز ، وهو تحسن فعال في الاختيار المباشر للفرز.
تعريف الكومة هو كما يلي: تسلسل (H1 ، H2 ، ... ، HN) مع عناصر N ، وفقط كما راضية (HI> = H2I ، HI> = 2I+1) أو (HI <= H2I ، مرحبًا <= 2i 2i) +1) (i = 1،2 ، ... ، n/2) يسمى كومة. هنا نناقش فقط الأكوام التي تلبي شروط الأولى. يمكن ملاحظة من تعريف الكومة أن العنصر العلوي (أي العنصر الأول) يجب أن يكون أكبر عنصر (تفريغ كبير كبير). يمكن أن تمثل شجرة ثنائية كاملة بشكل حدسي هيكل الكومة. الجزء العلوي من الكومة متجذرة ، ويترك الآخرون من الفرع والدراسات الفرعية اليمنى. في البداية ، تعتبر التسلسلات المراد فرزها شجرة ثنائية مخزنة بالترتيب ، وضبط أمر التخزين الخاص بهم حتى يصبحوا كومة. ثم تبادل عقدة الجذر مع العقدة الأخيرة من الكومة. ثم إعادة ضبط الرقم السابق (N-1) لجعله كومة. وفقًا لهذا النوع ، حتى لا يكون هناك سوى عقدتين ، وتبادلهما ، وأخيراً الحصول على تسلسل منظم من العقد N. من منظور وصف الخوارزمية ، يتطلب تسلسل التراص عمليتين. لذلك ، هناك تكوين وظيفتان من فرز الكومة. إحداها هي وظيفة تغلغل الوبر ، والآخر هو استدعاء وظيفة التسلل مرارًا وتكرارًا لتنفيذ وظيفة الفرز.
(2) مثال:
التسلسل الأولي: 46،79،56،38،40،84
بناء:
تبادل ، ركل العدد الأقصى من الوبر
تم تصميم العقد المتبقية مرة أخرى ، ويتم تبادل العدد الأقصى
ادفع بالترتيب: يتم تبادل العقدان الأخيران في الكومة الأخيرة من العقدتين الأخيرتين ، ويتم طرد واحد ، ويتم الانتهاء من هذا النوع.
(3) أدرك مع جافا
استيراد java.util.arrays ؛ ، 15،35،25،53،51} ؛ الطول ؛ 0 ، arraylength-i) ؛ Goneralted Method int tmp = data [i] ؛ ) {// todo ato-gonement method coll // العقدة الأصل للعقدة (العقدة الأخيرة) من البداية lastIndex لـ (int i = (lastIndex-) ؛ i> = 0 ؛ i-) {// k حفظ العقدة int k = i ؛ BiggerIndex أصغر من LastIndex ، أي العقدة اليمنى للعقدة K التي تمثل عقدة K التي تمثلها BiggerIndex+1 موجودة إذا (BiggerIndex <LastIndex) {// إذا كانت قيمة العقدة اليمنى أكبر ، (البيانات [BiggerIndex ] <data [BiggerIndex+1]) {// BiggerIndex دائمًا يسجل الفهرس BiggerIndex ++ ؛} // إذا كانت قيمة العقدة K أقل من قيمة العقدة K إذا (البيانات [البيانات [البيانات [البيانات K) ] <البيانات [BiggerIndex]) {// تبادل المبادلة (البيانات ، K ، BiggerIndex) ؛ من قيمة العقد اليمنى واليسرى.5. فرز الفقاعات
(1) الأفكار الأساسية: في مجموعة يتم فرزها ، جميع الأرقام داخل النطاق التي لم يتم تفريغها بعد ، ومقارنة وتعديل الرقمين المجاورة من أعلى إلى أسفل ، بحيث تتجول العدد الأكبر ، أصغر. هذا هو: كلما تتم مقارنة رقمين مجازين ، يجدون أن متطلبات الفرز والفرز الخاصة بهم معاكسة ، وسوف يتبادلون.
(2) مثال:
(3) أدرك مع جافا
الفئة العامة bubblesort {publicbbitsort () {inta [] = {49،38،65،97،76،13،49،78،34،5،4،62،98،54،54،56 ، 17،18،23 ، 34،15،35،25،53،51} ؛ Length-1-I ؛ +1] = temp ؛}}} لـ (int i = 0 ؛ i <a.length ؛ i ++) {system.out.println (a [i]) ؛}}6. فرز بسرعة
(1) الأفكار الأساسية: اختر عنصرًا قياسيًا ، وعادة ما اختر العنصر الأول أو العنصر الأخير. العنصر القياسي.
(2) مثال:
(3) أدرك مع جافا
PublicClass Quicksort {inta [] = {49،38،65،97،76،13،27،78،34،264،5،4،99،98،54،56،17،18 23،34،15،35،35،25 ، 53،51} ؛ [] قائمة ، int منخفضة) {int tmp = list [low] ؛ قائمة عالية ؛} [low] = قائمة [عالية] [High] = قائمة [منخفض] ؛ int low ، int high) {if (low <high) {int middle = getMiddle (list ، low ، high) ؛ فرز الجداول المنخفضة -character (قائمة ، متوسطة + 1 ، عالية) ؛ صفيف فارغ_7. دمج الفرز
(1) الفرز الأساسي: طريقة الفرز (دمج) المرفق هي دمج اثنين (أو أكثر) أو أكثر في ترتيب جديد ، وهو مقدمة. ثم الجمع بين تسلسل الطلب في الترتيب العام.
(2) مثال:
(3) أدرك مع جافا
استيراد java.util.arrays ؛ ، 15،35،53،51} ؛ (A [i]) ؛} sort publicvoid sort (int [] int ، int int ، int inter) {// todo-goneraltedmethod cub if (left <ritle) { / / / find index index center = (left+right) /2 ؛ ؛}} publicvoid merge (int [] int left ، int int right) {// todo-goneorates int [data.length] ؛ Arty Array int Project = Left ؛ ]) {tmparr [third ++] = data [Left ++] ؛} آخر {tmparr [third ++] = data [mid ++] ؛ ++] ؛} بينما (يسار <= الوسط) {tmparr [Third ++] = Data [Left ++] ؛ println (arrays.toString (data)) ؛8. الفرز الأساسي
(1) الأفكار الأساسية: موحدة جميع قيم المقارنة (الأعداد الصحيحة الإيجابية) إلى نفس طول الرقم ، ويتكون عدد الأرقام القصيرة قبل الصفر. ثم ، بدءا من أدنى موقف وفرز بدوره. سيصبح هذا تسلسلًا منظمًا من أدنى موضع إلى أعلى فرز.
(2) مثال:
(3) أدرك مع جافا
استيراد java.util.arraylist ؛ ، 54،101،56،17،23،34،15،35،25،53،51} ؛ {system.out.println (A [i]) ؛}} sort public void (int [] {// حدد عدد رحلات الفرز ؛ <array.length ؛ Time ++ ؛} // إنشاء 10 قوائم في قائمة الانتظار ؛ ins> () ؛ <صفيف ؛ int) Math.Pow (10 ، i) 0 = queue.get (k) ؛ما سبق هو كل محتويات هذه المقالة.