ترتيب بالإدراج
الترتيب بالإدراج هو الترتيب الأفضل بالنسبة للقوائم الصغيرة ولكنه ليس الأمثل للاستخدام في القوائم الكبيرة.
المبدأ بسيط: هذا الترتيب يتم استعماله من أي شخص يريد مثلا ترتيب ملفاته أو أوراقه، يتم وضع ملف في مكانه ضمن الملفات التي سبق ترتيبها، ثم نمر إلى الملف الموالي.
خصائص
- عدد المفارنات اللازمة من الرتبة .
- معدل التبديلات من الرتبة .
- تعقيد الخوارزم:
مثال
مثال بسيط لترتيب بالإدراج في C
typedef int tab_entiers[MAX];
void insertion(tab_entiers t) {
/* Spécifications externes : Tri du tableau t par insertion séquentielle */
int i،p،j،x;
for(i = 1 ; i < MAX ; i++) {
/* Calcul de la position d'insertion p : */
/* détermine le plus petit indice p / 0 <= p <= i */
/* qui vérifie t[p] >= t[i] */
p = 0;
while(t[p] < t[i]) p++;
x = t[i]; /* Sauvegarde de t[i] */
for(j = i-1 ; j >= p ; j--) t[j+1] = t[j]; /* translation de t[p..i-1] vers t[p+1..i] */
t[p] = x; /* insertion de t[p] */
}
}
مثال بلغه c++
template <class T> void insertionSort(std::vector<T>& v, int fin) {
int i, j, index;
for (i=1; i <fin; i++) {
index = v.at(i);
j = i-1;
while (j >= 0 && v.at(j)>index) {
v.at(j+1)=v.at(j);
j--;
}
v.erase(v.begin()+j+1);
v.insert(v.begin()+j+1,index);
}
}
مثال بلغه جافا
public static void insertSort (int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j;
for (j=i-1; j>=0 && v[j]>aux; j--)
v[j+1] = v[j];
v[j+1] = aux;
}
}
مثال بلغه Visual Basic .NET
Private Sub insertionSort(ByVal numbers() As Integer)()
Dim i, j, index As Integer
i = 1
Do
index = numbers(i)
j = i - 1
While ((j >= 0) And (numbers(j) > index))
numbers(j + 1) = numbers(j)
j = j - 1
If j < 0 Then
Exit While
End If
End While
numbers(j + 1) = index
i = i + 1
Loop Until i > (UBound(v))
End Sub
| |
This article contains content from Wikimedia licensed under CC BY-SA 4.0. Please comply with the license terms.
