CodeBlanks Logo Icon CodeBlanks

Merge sort uygula

Merge sort ile puanları küçükten büyüğe sıralarsın.

Top N seç

Sıralı diziden en büyük k tanesini seçeceğiz. Sıralı dizi küçükten büyüğe olduğu için, en büyükler dizinin sonundadır ve kolayca alınabilir.

sorted_scores[-k:] bize son k elemanı verir. Bu, en büyük k puandır; sıraları korunur.

Top 3 için [88, 90, 92] bekleriz; yani en yüksek üç puan.

Negatif indeks

Python'da arr[-k:] dizinin son k elemanını verir. [-1] son eleman, [-2:] son iki eleman anlamına gelir.

Bu, arr[len(arr)-k:] yazmaktan daha kısa ve okunaklıdır. Sıralı dizilerde en büyükleri almak için idealdir ve yaygın kullanılır.

En küçük k için arr[:k] kullanılır; bu, baştan dilim alır ve en küçükleri verir.

Uygulama Top N seç

top_k(scores, k) yaz. Önce sırala, sonra en büyük k taneyi döndür. print(top_k(init_scores(), 3)) ile [88, 90, 92] yazdır.

Başlangıç kodu

solution.py
def init_scores():
    # Puan dizisi döndür
    return [85, 92, 78, 90, 88]
def merge_sort_scores(scores):
    # Skorları sırala
    if len(scores) <= 1:
        return scores
    mid = len(scores) // 2
    left = merge_sort_scores(scores[:mid])
    right = merge_sort_scores(scores[mid:])
    return merge(left, right)
def top_k(scores, k):
    # En büyük k taneyi al

Örnek çözüm

solution.py
def merge(left, right):
    result = []
    i = j = 0
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i]); i += 1
        else:
            result.append(right[j]); j += 1
    result.extend(left[i:]); result.extend(right[j:])
    return result
def init_scores():
    # Puan dizisi döndür
    return [85, 92, 78, 90, 88]
def merge_sort_scores(scores):
    # Skorları sırala
    if len(scores) <= 1:
        return scores
    mid = len(scores) // 2
    left = merge_sort_scores(scores[:mid])
    right = merge_sort_scores(scores[mid:])
    return merge(left, right)
def top_k(scores, k):
    # En büyük k taneyi al
    sorted_scores = merge_sort_scores(scores)
    return sorted_scores[-k:]
print(top_k(init_scores(), 3))

Beklenen çıktı

[88, 90, 92]

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Dilim

Soru
return sorted_scores[____:]
Cevap
return sorted_scores[-k:]

Açıklama: -k doğru.

2 Merge sort uygula: kavramları eşleştir

Kavram Anlamı
En büyük k [-k:]
En küçük k [:k]
Son eleman [-1]
İlk eleman [0]

3 Top 3 için ne kullanılır?

  • sorted_scores[:3]
  • sorted_scores[-1]
  • sorted_scores[3]
  • sorted_scores[-3:] Doğru cevap

Açıklama: sorted_scores[-3:]

Orta seviye bölümündeki tüm dersler