ترتيب بالإدراج في المكان نفسه عبر مرجع متغير
// ترتيب بالإدراج في المكان نفسه عبر مرجع متغير.
استورد std.io.println;
استورد std.text.number;
استورد std.text.transform;
عرف رتب_بالإدراج(القيم: &متغير متجه عدد): فراغ {
دع ف: متغير طبيعي = 1;
طالما (ف < (الطول(*القيم) مثل طبيعي)) {
دع الحالي: عدد = (*القيم)[ف];
دع ك: متغير طبيعي = ف;
طالما (ك > 0 && (*القيم)[ك - 1] > الحالي) {
(*القيم)[ك] := (*القيم)[ك - 1];
ك := ك - 1;
}
(*القيم)[ك] := الحالي;
ف := ف + 1;
}
}
عرف الرئيسية(): عدد {
دع القيم: متغير متجه عدد = [31, 4, 15, 9, 26, 5, 3];
رتب_بالإدراج(&متغير القيم);
دع النصوص: متغير متجه نص = [];
دع ف: متغير طبيعي = 0;
طالما (ف < (الطول(القيم) مثل طبيعي)) {
ألحق(النصوص, عدد_إلى_نص(القيم[ف]));
ف := ف + 1;
}
دع المسافة: نص = " ";
اطبع_سطر(صل_النصوص(&النصوص, &المسافة));
أرجع 0;
}// Insertion sort in place through a mutable reference.
import std.io.println;
import std.text.number;
import std.text.transform;
def insertion_sort(values: &mutable vector int): void {
let i: mutable uint = 1;
while (i < (length(*values) as uint)) {
let current: int = (*values)[i];
let j: mutable uint = i;
while (j > 0 && (*values)[j - 1] > current) {
(*values)[j] := (*values)[j - 1];
j := j - 1;
}
(*values)[j] := current;
i := i + 1;
}
}
def main(): int {
let values: mutable vector int = [31, 4, 15, 9, 26, 5, 3];
insertion_sort(&mutable values);
let texts: mutable vector string = [];
let i: mutable uint = 0;
while (i < (length(values) as uint)) {
append(texts, int_to_text(values[i]));
i := i + 1;
}
let space: string = " ";
println(join(&texts, &space));
return 0;
}
التشغيل
بالمفسر، دون ترجمة:
./build/sultanc run examples/ar/algorithms/insertion_sort.snأو ترجمه إلى ملف تنفيذي:
./build/sultanc examples/ar/algorithms/insertion_sort.sn -o build/example && ./build/example