يعد الفرز السريع تحسينًا لفرز الفقاعات استنادًا إلى الفكرة الثنائية. الفكرة الرئيسية هي إنشاء قاعدة، ووضع الأرقام الأصغر من القاعدة على يسار القاعدة، ووضع الأرقام الأكبر من القاعدة على يمين القاعدة، ثم فرز جزأين الأرقام لتحقيق ذلك فرز المصفوفة.
ميزته هي الكفاءة العالية، ومتوسط التعقيد الزمني هو O(nlogn)، كما يوحي الاسم، فإن الفرز السريع هو أسرع خوارزمية فرز ويستهلك القليل من الموارد يتم تقسيمها بالتساوي في كل مرة، وفي حالة المصفوفات، يكون الكود بسيطًا نسبيًا.
عيبه هو أنه غير مستقر عندما يتم ترتيب التسلسل الأولي أو ترتيبه بشكل أساسي، ينخفض التعقيد الزمني إلى O(n^2).
على سبيل المثال:
publicclassMain{// طريقة تنفيذ الصف السريع publicstaticvoidquickRow(int[]array,intlow,inthigh){inti,j,pivot;//حالة النهاية if(low>=high){return;}i=low;j=high;/ / العقدة المحددة، يتم استخدام الرقم الأول من المصفوفة المحددة هنا كعقدة Pivot=array[low];while(i<j){// ابحث عن رقم أصغر من العقدة من اليمين إلى اليسار من الحلقة، إما تم العثور عليها أو i =jwhile(array[j]>=pivot&&i<j){j--;}// ابحث عن رقم أكبر من العقدة من اليسار إلى اليمين ، إما تم العثور عليه، أو i=jwhile(array[i]<=pivot&&i <j){i++;}// إذا تم العثور على تعليمات i!=j، فاستبدل الرقمين if(i<j){inttemp=array [i];array[i]=array[j];array [j]=temp;}}//i==j تنتهي الدورة وعدد عقد التبادل وعدد نقاط الالتقاء array[low]=array [i];array[i]=pivot;//array "مقسم" "نصفين"، ثم كرر العملية المذكورة أعلاه QuickRow(array,low,i-1);quickRow(array,i+1,high);} publicstaticvoidmain(String[]args){int[]array={6,17, 38,59,2,10};intlow=0,high=array.length-1;quickRow(array,low,high);for( inti:array){System.out.println(i);}}}
نتائج التشغيل هي كما يلي:
2610173859