Counting Sort
Last updated
Was this helpful?
Last updated
Was this helpful?
Counting sort
bu taqqoslashga asoslanmagan saralash algoritmi bo'lib, u kirish qiymatlarining cheklangan diapazoni mavjud bo'lganda yaxshi ishlaydi. Bu ayniqsa, kirish qiymarlari diapazoni saralanadigan elementlar soniga nisbatan kichik bo'lsa samarali bo'ladi. Counting sort
ni asosiy g'oyasi kirish massividagi har bir elementning chastotasini hisoblash va bu ma'lumotlardan elementlarni to'g'ri tartiblangan joylarga joylashtirish uchun foydalanishdir.
Berilgan massivdan maksimal elementni toping.
Uzunligi max+1 bo'lgan countArray[] ni barcha elementlari 0 sifatida ishga tushuring. Ushbu massiv kirish massivining elementlarining paydo bo'lishini saqlash uchun ishlatiladi.
countArray[] da kirish massivining har bir noyob elementi sonini tegishli indekslarida saqlang.
Misol uchun: Kirish massividagi 2
elementining soni 2
ga teng. Demak, countArray[] da 2-indeksda 2 ni saqlang. Xuddi shunday, kirish massividagi 5
elementining soni 1
ga teng, shuning uchun countArray[] da 5-indeksda 1 ni saqlang.
Endi countArray[i] = countArray[i - 1] + countArray[i]
ni bajarib, countArray[] elementlarining yig'indisi yoki prefiks yig'indisini saqlang. Bu kirish massivining elementlarini chiqish massividagi to'g'ri indeksga joylashtirishga yordam beradi.
Kirish massivining oxiridan boshlab takrorlang, chunki kirish massivini oxiridan o'tish teng elementlar tartibini saqlaydi, natijada bu tartiblash algoritmini barqaror qiladi.
outputArray[countArray[inputArray[i]]-1] = inputArray[i]
, outputArrayni yangilang.
Shuningdek, countArray[inputArray[i]] = countArray[inputArray[i]]--
countArrayni ham yangilang.
outputArray[countArray[inputArray[6]]-1] = inputArray[6]
, outputArrayni yangilang.
Shuningdek, countArray[inputArray[6]] = countArray[inputArray[6]]--
countArrayni ham yangilang.
outputArray[countArray[inputArray[5]]-1] = inputArray[5]
, outputArrayni yangilang.
Shuningdek, countArray[inputArray[5]] = countArray[inputArray[5]]--
countArrayni ham yangilang.
outputArray[countArray[inputArray[4]]-1] = inputArray[4]
, outputArrayni yangilang.
Shuningdek, countArray[inputArray[4]] = countArray[inputArray[4]]--
countArrayni ham yangilang.
outputArray[countArray[inputArray[3]]-1] = inputArray[3]
, outputArrayni yangilang.
Shuningdek, countArray[inputArray[3]] = countArray[inputArray[3]]--
countArrayni ham yangilang.
outputArray[countArray[inputArray[2]]-1] = inputArray[2]
, outputArrayni yangilang.
Shuningdek, countArray[inputArray[2]] = countArray[inputArray[2]]--
countArrayni ham yangilang.
outputArray[countArray[inputArray[1]]-1] = inputArray[1]
, outputArrayni yangilang.
Shuningdek, countArray[inputArray[1]] = countArray[inputArray[1]]--
countArrayni ham yangilang.
outputArray[countArray[inputArray[0]]-1] = inputArray[0]
, outputArrayni yangilang.
Shuningdek, countArray[inputArray[0]] = countArray[inputArray[0]]--
countArrayni ham yangilang.
max(inputArray[])+1 oʻlchamdagi countArray[] yordamchi massivini eʼlon qiling va uni 0 bilan ishga tushiring.
inputArray[] massivini aylantiring va inputArray[] ning har bir elementini countArray[] massivi indeksi sifatida ko'rsating, ya'ni 0 <= i < N uchun countArray[inputArray[i]]++ ni bajaring.
inputArray[] massivining har bir indeksidagi prefiks summasini hisoblang.
N o'lchamdagi outputArray[] massivi yarating.
inputArray[] qatorini oxiridan aylantiring va outputArray[countArray[inputArra[i]]-1] = inputArray[i]
ni yangilang. Shuningdek, countArray[inputArray[i]] = countArray[inputArray[i]]--
ni yangilang.
Quyida yuqoridagi algoritmni amalga oshirish ko'rsatilgan:
Time Complexity O(N+K)
, bu yerda N - massiv uzunligi, K - massivning maksimal elementi.
Best Case: O(N+K)
Average Case: O(N+K)
Worst Case: O(N+K)
Space Complexity: O(N+K)
, bu yerda N - massiv uzunligi, K - massivning maksimal elementi.
Counting sort agar kiritish diapazoni kirish soniga teng bo'lsa, odatda merge sort, quick sort kabi barcha taqqoslashga asoslangan tartiblash algoritmlariga qaraganda tezroq ishlaydi.
Counting sortni kodlash oson
Counting sort barqaror algoritmdir.
Counting sort decimal qiymatlarda ishlamaydi.
Saralash kerak bo'lgan qiymatlar oralig'i juda katta bo'lsa, counting sort
samarasiz bo'ladi.
Kodni ishlatib ko'rish uchun dan foydalaning.
Counting sort joyida tartiblash() algoritmi emas, u massiv elementlarini saralash uchun qo'shimcha joydan foydalanadi.
Source: