إنشاء خوارزميات بسيطة

Skip to content

هذا نص مترجم آليًا وقد يحتوي على أخطاء!

Quote

“خوارزمية”، كلمة يستخدمها المبرمجون عندما لا يريدون شرح ما فعلوه.

Algoritme?

ما هي الخوارزمية؟

الخوارزمية هي دالة منطقية تنفذ عملية معينة. بمعنى آخر، يمكنك من الناحية الفنية أن تسمي دالة تجمع رقمين “خوارزمية”، ولكن في أغلب الأحيان تكون الخوارزمية شيئًا أكثر تعقيدًا من ذلك. غالبًا ما تُستخدم الخوارزميات لتسريع العمليات التي تستغرق وقتًا طويلاً.

Algorithm Meme

هل يجب عليّ استخدام بايثون في هذه المهام؟

لا! يمكنك استخدام أي لغة برمجة تفضلها في هذه المهام.

هل المكتبات المدمجة؟

الفكرة في هذه المهام هي تجنب استخدام المكتبات المدمجة أو وظائف Python الخاصة. على سبيل المثال، هناك “سطر واحد” بسيط لعكس النص: text[::-1]، ولكن هنا نريد منك محاولة حل هذه المهام بدون استخدام ذلك. قد نذكر وظيفة مدمجة إذا كان الحل صعبًا بعض الشيء. سيتم تمييز ذلك بـ ❗.

في الممارسة العملية، يجب أن يكون من الممكن تمامًا حل جميع هذه المهام باستخدام if و for و while وعمليات القائمة العادية.

كيف “تصميم” خوارزمية؟

في أغلب الأحيان، يتم تصميم الخوارزميات بشكل تكراري. ماذا يعني هذا؟

1. ✅ قم أولاً بتقسيم المشكلة إلى أجزاء أصغر.
  • فكر أولاً وقبل كل شيء في أهم شيء تحتاجه لكي يعمل الخوارزمية
    • هل يجب أن تُرجع قيمة؟ قيمة boolean؟ قائمة؟
    • هل أحتاج إلى أي وظائف مساعدة؟

2. ❓ هل هناك أي حالات خاصة؟
  • ماذا يحدث إذا قمت بإدخال قائمة فارغة أو نص؟

3. ✅ ابدأ بمجرد محاولة إيجاد حل.

4. ✅ تحقق مما إذا كانت الخوارزمية تعمل بشكل جيد في وقت التشغيل
  • جرّب مدخلات أكبر، هل يستغرق الأمر وقتًا طويلاً؟

5. ❓ فكر في حلك، هل تحتاج إلى جميع الخطوات التي استخدمتها؟
  • هل جميع فحوصات if ضرورية؟
  • إذا كان لديك أكثر من حلقة for واحدة، فهل هناك طرق واضحة للقيام بذلك في حلقة for واحدة؟
    • هذا يختلف إذا كان لديك حلقات متداخلة أو حلقات متتالية. غالبًا ما يكون من الممكن تجنب المتتالية.

6. ✅ فكر في السيناريوهات المتطرفة مع المدخلات:
  • مثال مع أرقام: أرقام كبيرة، أرقام صغيرة، أرقام سالبة
  • مثال نصي: الكثير من النصوص، العديد من الكلمات الصغيرة، مسافات إضافية، أحرف كبيرة وصغيرة.

7. ❓ هل من المفيد استخدام شبه الرمز لفهم المنطق بشكل أفضل؟

Easy مهمة 1 - تحديد ما إذا كانت القائمة تحتوي على رقم معين

قم بإنشاء خوارزمية (دالة) تحدد ما إذا كانت القائمة تحتوي على رقم معين. يجب أن تُرجع True أو False بناءً على ما إذا كان الرقم موجودًا في القائمة أم لا.

إليك قائمة ببيانات الاختبار:

Test-data for algoritme:
Test-Data Sjekk Svar
[1, 2, 3, 4, 5, 6, 7, 8, 9] 5 True
[1, 2, 3, 4, 5, 6, 7, 8, 9] 10 False
[2, 3, 5, 7, 11, 13, 17, 19, 23] 2 True
[2, 3, 5, 7, 11, 13, 17, 19, 23] 10 False
[-1, 0, 1, -34, 321, 22, 98, -214] -214 True
[-1, 0, 1, -34, 321, 22, 98, -214] 0 True
[-1, 0, 1, -34, 321, 22, 98, -214] 2 False

Tips til framgangsmåte
  1. أدخل قائمة وقيمة قائمة في دالة. في هذه المهمة، يجب أن تكون أرقامًا، ولكن يمكن أن تكون نصًا.
  2. استخدم حلقة for للمرور عبر القائمة
  3. إذا كان الرقم مساويًا لرقم التحقق، فأرجع True
  4. إذا انتهت حلقة for ولم تجدها، فأرجع False

Svaret (i python)
def exists_in_list(the_list, check):
    for number in the_list:
        if number == check:
            return True
    return False


Easy مهمة 2 - التلخيص

قم بإنشاء خوارزمية تقوم بجمع قائمة من الأرقام.

Test-data for algoritme:
  • [1, 2, 3, 4, 5, 6], يعطي الإجابة 21.
  • [5, 1, 23, 68, 22, 13, 4], يعطي الإجابة 136
  • [3, 3, -3, -3, 3] يعطي الإجابة 3. ربما يمكنك تجاهل الأرقام السالبة وإعطاء الإجابة 9.

Tips til framgangsmåte
  1. أدخل قائمة في دالة
  2. احفظ مجموعًا مؤقتًا كـ 0.
  3. استخدم حلقة for للمرور عبر القائمة.
  4. return مجموع القائمة.

Svaret (i python)
def sum_list(numbers):
    total = 0
    for num in numbers:
        total += num
    return total

تعريف الدالة لحساب مجموع قائمة الأرقام:

def sum_list(numbers):
    total = 0
    for num in numbers:
        total += num
    return total


Medium مهمة 3أ - القيمة القصوى في قائمة

قم بإنشاء خوارزمية للعثور على أكبر قيمة في قائمة.

Test-data for algoritme:
  • [1, 2, 3, 4, 5, 6], يعطي الإجابة 6.
  • [6, 17, 227, 1, 23, 42, 12], يعطي الإجابة 227
  • [2, -2, 2, -2, -2, 2] يعطي الإجابة 2.

Tips til framgangsmåte
  1. أدخل قائمة في دالة
  2. عيّن قيمة مؤقتة للعنصر الأول في القائمة.
  3. استخدم حلقة for للمرور عبر القائمة ومقارنتها بالقيمة التي حددتها في 2.
  4. إذا كانت القيمة أكبر، فقم بتعيين القيمة المؤقتة إلى القيمة الجديدة.
  5. return هذه القيمة المؤقتة.

Svaret (i python)
def find_max(numbers):
    largest = numbers[0]
    for num in numbers:
        if num > largest:
            largest = num

    return largest

هذا هو الحل (في بايثون)

Easy المهمة 3ب - إذا كانت القائمة فارغة؟

أضف فحصًا يختبر ما إذا كانت القائمة تحتوي على عناصر. إذا لم يكن الأمر كذلك، فأرجع None.

Svaret (i python)
def find_max(numbers):
    if len(numbers) == 0:
        return None

    largest = numbers[0]
    for num in numbers:
        if num > largest:
            largest = num

    return largest


Easy المهمة 4 - عد عدد عنصر معين في قائمة

قم بإنشاء خوارزمية لعد عدد عنصر معين في قائمة.

Test-data for algoritme:
  • ["apple", "banana", "orange", "apple", "apple", "banana"] مع apple يعطي الإجابة 3.
  • [1, 4, 5, 2, 4, -3, -4, 4, 2, 4, 221, 3, 1, 1, 4, 1, 12, 33, 4, 4, 2, -4, 1, 4] مع 4 يعطي الإجابة 8.
  • ["cat", "dog", "cat", "mouse", "cat", "dog", "dog"] مع dog يعطي الإجابة 3.
  • [7, 7, 2, 9, 7, 1, 0, 7, 3, 7, 9] مع 7 يعطي الإجابة 5.
  • ["red", "blue", "green", "red", "yellow", "red"] مع red يعطي الإجابة 3.
  • [10, -2, -2, -2, 5, 10, 10, -2] مع -2 يعطي الإجابة 4.

Tips til framgangsmåte
  1. أدخل قائمة وقيمة تحقق في دالة
  2. ابدأ بقيمة عد مؤقتة مضبوطة على 0.
  3. انتقِ خلال القائمة باستخدام حلقة for.
  4. إذا كان العنصر مساويًا للتحقق، فقم بزيادة قيمة العد بمقدار 1.
  5. أرجع قيمة العد.

Svaret (i python)
def count(the_list, check):
    count = 0
    for element in the_list:
        if element == check:
            count += 1

    return count


Medium مهمة 5 - عكس string نص

قم بإنشاء خوارزمية لعكس string معطاة.

Test-data for algoritme:
  • Hello there! يصبح !ereht olleH.
  • heisann alle sammen يصبح nemmas ella nnasieh
  • Python يصبح nohtyP
  • racecar يصبح racecar
  • 12345abc يصبح cba54321
  • god morgen يصبح negrom dog

Tips til framgangsmåte
  1. أدخل string في دالة
  2. أنشئ قيمة مؤقتة لتخزين string فارغ.
  3. انتقل عبر النصوص باستخدام حلقة for مع range. يمكنك الانتقال عبر القائمة للخلف، ولكن يمكنك حل هذا بالانتقال للأمام في القائمة.
  4. أضف كل حرف إلى القيمة المؤقتة بالترتيب.
  5. أرجع النص المؤقت.

Svaret (i python)
def reverse(text):
    result = ""
    # هذا السطر معقد بعض الشيء، لكنه يبدأ
    # من النهاية، ويمر (بما في ذلك) إلى 0 (عن طريق كتابة
    # -1 كنهاية)، وينزل بمقدار 1 في كل مرة
    for i in range(len(text) - 1, -1, -1):
        result += text[i]
    return result

ربما يمكنك استخدام خوارزمية تضيف في البداية بدلاً من ذلك:

def reverse(text):
   result = ""
   for i in range(0, len(text)):
       # أضف في البداية بدلاً من ذلك
       result = text[i] + result
   return result


Medium المهمة 6 - خوارزمية المتناظر

قم بإنشاء خوارزمية تتحقق مما إذا كانت كلمة معينة متناظرة أم لا. أمثلة على المتناظرات هي abba و racecar و regninger.

Tips til framgangsmåte
  1. قم بإنشاء دالة تأخذ نصًا للتحقق
  2. استخدم حلقة for للتحقق مما إذا كانت الأحرف على كل جانب من النص متطابقة.
  3. أرجع False إذا لم يتطابق حرف، وإذا تطابقت جميع الأحرف (اكتملت حلقة for)، فأرجع True.

Ekstra:
هل ترى كيف يمكنك جعل الخوارزمية أسرع بمرتين؟

Hint

أنت تحتاج فقط إلى التحقق من النصف!

الإجابة (في بايثون)
def palindrome(text):
    for i in range(0, len(text)):
        if text[i] != text[len(text) - i - 1]:
            return False
    return True
خوارزمية أسرع

def palindrome(text):
for i in range(0, int(len(text) / 2)):
if text[i] != text[len(text) - i - 1]:
return False
return True


Medium المهمة 7 - التحقق مما إذا كانت القائمة مرتبة

قم بإنشاء خوارزمية تتحقق مما إذا كانت القائمة مرتبة. أسهل طريقة للتحقق من ذلك هي البدء من البداية ومقارنة ما إذا كان العنصر التالي “أكبر”. إذا لم يكن العنصر “أكبر”، فإن القائمة ليست مرتبة.

Test-data for algoritme:
  • [1, 2, 3, 4, 5, 6], يعطي الإجابة True.
  • [6, 17, 227, 1, 23, 42, 12], يعطي الإجابة False
  • [2, -2, 2, -2, -2, 2] يعطي الإجابة False.
  • [2, 2, 3, 4, 4, 6], يعطي الإجابة True.
  • [12, 23, 34, 45, 56, 67], يعطي الإجابة True.

Tips til framgangsmåte
  1. قم بإنشاء دالة تأخذ قائمة كمدخل.
  2. استخدم حلقة for للمرور عبر القائمة بأكملها (استخدم range لطول القائمة، ناقص 1 len(list) - 1).
  3. قارن العنصر \(n\) بالعنصر \(n + 1\)، أي العنصر الحالي بالعنصر التالي.
  4. إذا كان \(n\) أقل من \(n + 1\)، فانتقل إلى المقارنة التالية.
  5. إذا لم يكن أقل، بل أكبر، فهذه القائمة غير مرتبة. أرجع False هنا.
  6. إذا وصلت إلى النهاية، فهذه القائمة مرتبة، أرجع True.

Svaret (i Python)
def is_sorted(the_list):
    for i in range(len(the_list) - 1):
        if the_list[i] > the_list[i + 1]:
            return False
    return True


Medium مهمة 8 - خلط

قم بإنشاء خوارزمية لخلط قائمة بالعناصر. هناك العديد من الطرق للقيام بذلك، ولكن إحدى الطرق الجيدة هي ما يسمى بخوارزمية Fisher-Yates shuffle. يمكنك قراءة المزيد حول هذا هنا Wikipedia.

Test Data
  • ["a", "b", "c", "d", "e"] → يمكن أن يصبح مثلاً ["c", "e", "a", "d", "b"]
  • [1, 2, 3, 4, 5, 6] → يمكن أن يصبح مثلاً [4, 1, 6, 3, 2, 5]
  • ["apple", "banana", "orange"] → يمكن أن يصبح مثلاً ["orange", "apple", "banana"]
  • ["x"] → يظل كما هو ["x"]
  • [] → يظل كما هو []

كيف تعمل:

Algoritmen
  1. قم بإنشاء دالة تأخذ قائمة الأرقام كمدخل.
  2. قم بإنشاء قائمة فارغة جديدة للاحتفاظ بالنتيجة المختلطة.
  3. استخدم random لاختيار فهرس عشوائي في القائمة.
  4. أضف هذا العنصر إلى القائمة الفارغة واحذفه من القائمة القديمة.
  5. أرجع القائمة الجديدة من الدالة.

Svaret (i Python)
import random

def shuffle(the_list):
    shuffled = []

    while len(the_list) > 0:
        i = random.randrange(0, len(the_list))
        shuffled.append(the_list[i])
        the_list.pop(i)

    return shuffled


Medium المهمة 9 - بوجو-فرز

في هذه المهمة، ستقوم بإنشاء خوارزمية فرز (عمليًا) رهيبة، ولكنها بسيطة للغاية. إنها سيئة للغاية عندما يتعلق الأمر بالقوائم الكبيرة (ستستغرق إلى الأبد مع أكثر من 12-13 عنصرًا). في المستوى 2، سنقوم بإنشاء خوارزمية فرز أفضل، الفرز الفقاعي.

Test Data
  • [3, 1, 2][1, 2, 3]
  • [5, 4, 3, 2, 1][1, 2, 3, 4, 5]
  • [10, 7, 8, 2][2, 7, 8, 10]
  • [1, 1, 1][1, 1, 1]
  • [9, 3, 6, 3, 9][3, 3, 6, 9, 9]
  • [0, -1, 4, -2][-2, -1, 0, 4]

تعمل الخوارزمية كالتالي:

Algoritmen
  1. قم بإنشاء دالة تأخذ قائمة الأرقام غير المرتبة كمدخل.
  2. قم بخلط القائمة بشكل عشوائي (استخدم shuffle من المهمة 8).
  3. تحقق مما إذا كانت القائمة مرتبة (استخدم الفحص الذي قمت به في المهمة 7).
  4. إذا لم تكن القائمة مرتبة، كرر الخطوتين 2 و 3.
  5. كرر حتى تصبح القائمة مرتبة، ثم أرجع.

بشكل بسيط: يقوم bogo-sort بخلط القائمة بأكملها ويأمل أن تكون مرتبة.

Gru bogo sort meme
اقرأ عن تدوين Big O في المستوى 2.

تلميح: استخدم shuffle من المهمة 8 لإنشاء قائمة غير مرتبة للخوارزمية الخاصة بك.

Svaret (i Python)
def bogo_sort(the_list):
    while not is_sorted(the_list):
        the_list = shuffle(the_list)
    return the_list


Hard المهمة 10أ - البحث عن نص - “سلسلة فرعية” (صعب!)

قم بإنشاء خوارزمية يمكنها العثور على كلمة رئيسية في نص. أي، إذا كان لديك جملة مثل hello there، فسترجع True مع الكلمة الرئيسية hello، و False مع كلمة رئيسية مثل hahah. يجب أن تعمل هذه الخوارزمية بغض النظر عن المدخلات والمخرجات.

استخدم بيانات النص أدناه للتحقق مما إذا كانت خوارزيتك تعمل.

Test-data for algoritme:
  • hello there everyone مع there = True
  • hello there everyone مع ever = True
  • hello there everyone مع then = False
  • qwecvyufavsjekkftyergwcery مع sjekk = True

Tips til framgangsmåte
  1. قم بإنشاء دالة تأخذ سلسلتين (string)، البيانات و كلمة البحث.
  2. استخدم حلقة for مع range للتكرار خلال النص.
  3. من المهم هنا التفكير في إلى أي مدى يجب أن تمتد الحلقة.
  4. قم بإنشاء متغير مؤقت يشير إلى ما إذا تم العثور على كلمة البحث أم لا، وقم بتعيينه إلى True افتراضيًا.
  5. استخدم حلقة for أخرى مع range لمقارنة مكانك في النص بكلمة البحث.
  6. إذا لم يتطابق أي شيء في كلمة البحث مع المكان الذي تتحقق منه الآن، فقم بتعيين المتغير المؤقت إلى True و break للخروج من الحلقة الداخلية.
  7. إذا وصلت إلى نهاية النص دون العثور على أي شيء، فأرجع False.

Svaret (i Python)
def search(data, word): 
    for i in range(0, len(data) - len(word) + 1):
        found = True
        for j in range (0, len(word)):
            if data[i + j] != word[j]:
                found = False
                break
        if found:
            return True

    return False

Easy المهمة 10ب

أضف أيضًا فحصًا إضافيًا للتأكد من أن الكلمة المفتاحية ليست أطول من الجملة.

Tips til framgangsmåte
  • أضف هذا الفحص قبل حلقة for.

Svaret (i python)
def search(data, word): 
    if len(word) > len(data):
        return False

    for i in range(0, len(data) - len(word) + 1):
        found = True
        for j in range (0, len(word)):
            if data[i + j] != word[j]:
                found = False
                break
        if found:
            return True

    return False


Hard المهمة 11 - عكس الكلمات في الجملة (صعب)

تذكر المهمة 5 حول عكس جملة. عدّل (أو ابدأ من جديد) لإنشاء خوارزمية تعكس كل كلمة على حدة في جملة، ثم تجمعها معًا مرة أخرى.

Test-data for algoritme:
  • hello there everyone يصبح olleh ereht enoyreve
  • This is the way it goes! يصبح sihT si eht yaw ti !seog
  • does this racecar go? of course! يصبح seod siht racecar ?og fo !esruoc

Tips til framgangsmåte
  1. قم بإنشاء دالة تأخذ string كمدخل.
  2. ❗قسّم النص باستخدام .split(" ").
  3. قم بإنشاء متغير مؤقت لتخزين القيمة النهائية.
  4. استخدم حلقة for للمرور عبر كل كلمة.
  5. استخدم نفس الطريقة للعكس كما في المهمة 5
  6. استخدم النتيجة وأضفها إلى المتغير الذي أنشأته في الخطوة 2.
  7. أرجع القيمة النهائية

Svaret (i Python)
def reverse_words(words):
    sentence = words.split(" ")
    output = ""

    for word in sentence:
        reversed_word = ""
        for i in range(0, len(word)):
            reversed_word = word[i] + reversed_word
        output += reversed_word + " "

    return output

هذه هي الإجابة (في بايثون).

def reverse_words(words):
    sentence = words.split(" ")
    output = ""

    for word in sentence:
        reversed_word = ""
        for i in range(0, len(word)):
            reversed_word = word[i] + reversed_word
        output += reversed_word + " "

    return output


➕إضافي:

Cracked مهمة E1 - حذف التكرارات من قائمة

لنفترض أن لديك قائمة تحتوي على أرقام أو نصوص، ولكننا نريد حذف التكرارات. قم بإنشاء خوارزمية تحذف جميع التكرارات من قائمة وتحتوي فقط على العنصر الأول من كل عنصر فريد موجود في القائمة.

Tips til framgangsmåte
  1. ابدأ بدالة تأخذ قائمة كمدخل
  2. هنا سنستخدم حلقات while بدلاً من for. هذا يجعل الأمر أسهل في بايثون، في لغات أخرى تعمل for مع متغيرات العد بشكل جيد.
  3. أنشئ متغير عد idx (للفهرس، أو i)
  4. استخدم حلقة while يجب أن تنتقل إلى طول القائمة
  5. سنقارن العنصر الموجود في idx بجميع العناصر الأخرى
  6. أنشئ متغير عد إلى jdx (أو j) يبدأ من idx + 1
  7. قارن العنصر الموجود في idx بالعنصر الموجود في jdx، إذا كانا متساويين، احذف jdx باستخدام pop(jdx).
  8. تذكر! إذا حذفت العنصر، تصبح القائمة أصغر، لذلك يجب أن نعود خطوة واحدة عند jdx -= 1.
  9. قم بزيادة jdx بمقدار 1 واختبر العنصر التالي
  10. بعد الحلقة الداخلية while، قم بزيادة idx بمقدار 1 وستستمر الحلقة الخارجية while.
  11. أرجع القائمة مع إزالة التكرارات.

Test Data
  • [1, 2, 2, 3, 1, 4, 3] → يصبح [1, 2, 3, 4]
  • ["a", "b", "a", "c", "b", "d"] → يصبح ["a", "b", "c", "d"]
  • [5, 5, 5, 5] → يصبح [5]
  • ["x", "y", "z", "x", "y", "x"] → يصبح ["x", "y", "z"]
  • [10, -1, 10, -1, 0, 0, 10] → يصبح [10, -1, 0]
  • ["apple", "apple', "banana", "orange", "apple", "orange", "pear", "apple"]
    • يجب أن يعطي: ["apple", "banana", "orange", "pear"]

Svaret (i Python)
def delete_duplicates(the_list):
    idx = 0

    while idx < len(the_list):
        jdx = idx + 1

        while jdx < len(the_list):
            if the_list[idx] == the_list[jdx]:
                the_list.pop(jdx)
                jdx -= 1
            jdx += 1
        idx += 1

    return the_list


Cracked Oppgave E2 - Counting Sort

Counting sort هي إحدى خوارزميات الفرز القليلة التي تعمل في ما نسميه وقت \(O(n)\). أي أنها لا تستغرق وقتًا أطول بكثير من عدد العناصر في القائمة. اقرأ المزيد حول تدوين Big O في المستوى 2.

يعتمد الأمر قليلاً على مدى اتساع نطاق العناصر. إذا كان الأصغر 0 والأكبر 100000 فقد يستغرق الأمر بعض الوقت، لذلك يمكن استخدام هذا إذا كان نطاق القيم صغيرًا. كما أنها لا تعمل مع الأرقام السالبة، ولكن يمكن تعديل الخوارزمية لتعمل مع الأرقام السالبة.

تعمل الخوارزمية على النحو التالي:

  • اكتشف ما هو أكبر عنصر، وقم بتخزين قيمة هذا العنصر كـ \(k\).
  • قم بإنشاء قائمة تحتوي على \(k + 1\) عنصر، count.
  • انتقل عبر القائمة غير المرتبة واستخدم قيمة الرقم كفهرس. أي إذا كانت قيمة العنصر 47، فانتقل إلى count[47] وزدها بمقدار 1.
  • انتقل عبر قائمة count وضع عدد الأرقام التي هو الفهرس. مثال: إذا كان هناك 3 في الفهرس 1، فأضف ثلاثة أرقام 1.

Testdata
بيانات غير مرتبة بيانات مرتبة
[7, 3, 9, 1, 4, 3, 0, 6, 8, 6, 2, 1, 9, 0, 5, 4] [0, 0, 1, 1, 2, 3, 3, 4, 4, 5, 6, 6, 7, 8, 9, 9]
[12, 13, 15, 0, 8, 15, 8, 5, 16, 8, 0, 20, 4, 9, 17, 16, 1, 3, 6, 15, 5, 2, 3, 1, 19, 13, 17, 5, 3, 10] [0, 0, 1, 1, 2, 3, 3, 3, 4, 5, 5, 5, 6, 8, 8, 8, 9, 10, 12, 13, 13, 15, 15, 15, 16, 16, 17, 17, 19, 20]

Tips til framgangsmåte
  1. ابدأ بإنشاء دالة بقائمة كمدخل
  2. أنشئ قائمة output فارغة
  3. استخدم حلقة for للمرور عبر القائمة بأكملها
  4. تتبع القيمة القصوى في متغير قبل حلقة for.
  5. قم بتحديث القيمة القصوى إذا وجدت شيئًا أكبر.
  6. أنشئ قائمة تحتوي على هذا العدد من الأصفار + 1. مثال: أكبر قيمة هي 47، ثم قم بإنشاء قائمة بها 48 صفرًا. يمكنك القيام بذلك باستخدام [0] * (maks + 1)، أو حلقة for. أطلق عليها اسم count.
  7. مر عبر القائمة مرة أخرى باستخدام حلقة for.
  8. استخدم قيمة العنصر كفهرس وزد بمقدار 1. count[value] += 1
  9. استخدم حلقة for للمرور عبر قائمة count.
  10. استخدم القيمة الموجودة في كل فهرس لإضافة هذا العدد من الأرقام.
  11. أرجع القائمة التي تم فرزها.

Svaret (i Python)
def counting_sort(input_list):
    output = []

    max_val = input_list[0]

    for n in input_list:
        if n > max_val:
            max_val = n

    # dette vil lage en haug med nuller
    count = [0] * (max_val + 1)

    for n in input_list:
        count[n] += 1

    for i in range(len(count)):
        # bruk _ for å ignorere en verdi
        for _ in range(count[i]):
            output.append(i)

    return output