يكون إدراج الفرز فعالًا عند التشغيل على البيانات التي يتم فرزها تقريبًا ، أي يمكن تحقيق كفاءة الفرز الخطي.
لكن فرز الإدراج غير فعال عمومًا لأن فرز الإدراج لا يمكن أن ينقل البيانات إلا واحدًا تلو الآخر في وقت واحد.
تم تسمية هيل فرز على اسم مصممها دونالد شل ، وهي خوارزمية نُشرت في عام 1959. بعض الكتب المدرسية القديمة والأدلة المرجعية تسمى الخوارزمية Shell-Metzner ، والتي تحتوي على اسم Marlene Metzner Norton ، ولكن وفقًا لما قاله Metzner نفسه ، "لم أفعل شيئًا من أجل هذه الخوارزمية ، يجب ألا يظهر اسمي في الخوارزمية. باسم
الفكرة الأساسية لفرز التل: أولاً ، تأخذ عدد صحيح D1 أصغر من N كزيادة الأولى ، وقسم جميع سجلات الملف إلى مجموعات من D1. يتم وضع جميع السجلات مع مضاعفات المسافة D1 في نفس المجموعة. قم أولاً بإجراء فرز الإدراج المباشر في كل مجموعة ؛ يتم وضع السجلات في نفس المجموعة وفرزها مباشرة.
هذه الطريقة هي في الأساس طريقة إدخال التجميع.
مثال 1:
نسخة الكود كما يلي:
/**
* فرز التل ، والمعروف أيضًا باسم خوارزمية الفرز المتزايد المتناقص ، هو نسخة أكثر كفاءة وتحسين من إدراج فرز. فرز التل هو خوارزمية فرز غير مستقرة.
*
* تقترح فرز التل طريقة محسّنة بناءً على خصائص الفرز الإدراج التاليين:
*
* إدراج الفرز فعال عند التشغيل على البيانات التي يتم فرزها تقريبًا ، مما يعني أنه يمكن تحقيق كفاءة الفرز الخطي.
* لكن نوع الإدراج غير فعال عمومًا لأن نوع الإدراج لا يمكنه سوى نقل البيانات بمقدار واحد في وقت واحد.
*
*/
وظيفة shellsort (قائمة) {
var gap = math.floor (list.length / 2) ؛
بينما (GAP> 0) {
لـ (i = gap ؛ i <list.length ؛ i ++) {
temp = list [i] ؛
لـ (j = i ؛ j> = gap && list [j - gap]> temp ؛ j - = gap) {
قائمة [J] = قائمة [J - GAP] ؛
}
قائمة [j] = temp ؛
}
GAP = Math.floor (GAP / 2) ؛
}
قائمة العودة
} ؛
// امتحان
var arr = [2 ، 1 ، 3 ، 12 ، 5 ، 66 ، 23 ، 87 ، 15 ، 32] ؛
Shellsort (ARR) ؛
مثال 2:
نسخة الكود كما يلي:
<script type = "text/javaScript">
//document.write("-------------------------------------------- ------------------------------------------------- --------------------------- N إلى قوة 1.3 -------- ") ؛
//document.write(" <br /> <br /> ")
// var array = صفيف جديد (12 ، 25 ، 32 ، 16 ، 18 ، 27 ، 59 ، 69 ، 36) ؛
وظيفة shellsort (صفيف) {
var j ، i ، v ، h = 1 ، s = 3 ، k ، n = array.length ؛
var result = "" ؛
var count = 0 ؛
بينما (H <n)
h = s*h+1 ؛
بينما (H> 1) {
H = (H-1)/s ؛
لـ (k = 0 ؛ k <h ؛ k ++)
لـ (i = k+h ، j = i ؛ i <n ؛ i+= h ، j = i) {
v = صفيف [i] ؛
بينما (صحيح)
if ((j- = h)> = 0 && array [j]> v)
صفيف [j+h] = صفيف [j] ؛
آخر
استراحة؛
صفيف [j+h] = v ؛
}
count ++ ؛
النتيجة + = "<br /> thread" + count + "نتيجة الطلب من خلال الممر هي:" ؛
لـ (var n = 0 ؛ n <array.length ؛ n ++) {
النتيجة + = صفيف [n] + "،" ؛
}
}
نتيجة العودة
}
// شالسورت (صفيف) ؛
//document.write(" <br /> <br /> ") ؛
</script>