📘
Grokking-Algorithms book
PostgreSQL
  • Content
  • Introduction to Algorithms
    • Introduction
    • Binary Search
    • Big O notation
    • Recap
  • Selection sort
    • How memory works
    • Arrays and linked lists
    • Selection sort
    • Recap
  • Recursion
    • Recursion
    • Base case and recursive case
    • The stack
    • Recap
  • Quicksort
    • Divide & conquer
    • Quicksort
    • Big O notation revisited
    • Recap
  • Hash tables
    • Hash functions
    • Use cases
    • Collisions
    • Performance
    • Recap
  • Breadth-first search
    • Introduction to graph
    • What is a graph
    • Breadth-first search
    • Implementing the graph
    • Implementing the algorithm
    • Recap
  • Dijkstra's algorithm
    • Working with Dijkstra's algorithm
    • Terminology
    • Trading for a piano
    • Negative-weight edges
    • Implementation
    • Recap
  • Greedy Algorithms
    • The classroom scheduling problem
    • The knapsack problem
    • The set-covering problem
    • NP-complete problems
    • Traveling salesperson, step by step
    • Recap
  • Dynamic programming
    • The knapsack problem
    • Knapsack problem FAQ
    • Longest common substring
    • Recap
  • K-nearest neighbors
    • Classifying oranges vs. grapefruit
    • Building a recommendations system
    • Introduction to machine learning
    • Recap
  • Where to go next
    • Trees
    • Inverted indexes
    • The Fourier transform
    • Parallel algorithms
    • MapReduce
    • Bloom filters and HyperLogLog
    • The SHA algorithms
    • Locality-sensitive hashing
    • Diffie-Hellman key exchange
    • Linear programming
    • Epilogue
  • Answers to exercises
    • Chapter 1
    • Chapter 2
    • Chapter 3
    • Chapter 4
    • Chapter 5
    • Chapter 6
    • Chapter 7
    • Chapter 8
    • Chapter 9
    • Chapter 10
Powered by GitBook
On this page
  • EXAMPLE CODE LISTING
  • Python
  • Golang
  • Python
  • Golang

Was this helpful?

Edit on GitHub
  1. Selection sort

Selection sort

PreviousArrays and linked listsNextRecap

Last updated 1 year ago

Was this helpful?

Keling, ikkinchi algoritmingizni o'rganish uchun barchasini birlashtiramiz: tanlash tartibi. Ushbu bo'limga amal qilish uchun siz massivlar va ro'yxatlarni, shuningdek Big O belgilarini tushunishingiz kerak. Aytaylik, sizning kompyuteringizda bir nechta musiqa bor. Har bir rassom uchun sizda musiqalar soni bor.

Sevimli san'atkorlaringizni tartiblash uchun siz ushbu ro'yxatni eng ko'p qo'yilganidan eng kamigacha tartiblashni xohlaysiz. Buni qanday qila olasiz?

Buning bir usuli - ro'yxatni ko'rib chiqish va eng ko'p o'ynalgan rassomni topish. Ushbu rassomni yangi ro'yxatga qo'shing.

Keyingi eng ko'p o'ynagan rassomni topish uchun buni yana bajaring

Buni davom eting va siz tartiblangan ro'yxatni olasiz

Keling, kompyuter fanlari bo'yicha shlyapalarimizni kiyaylik va bu qancha vaqt davom etishini ko'raylik. Esda tutingki, O(n) vaqti roʻyxatdagi har bir elementga bir marta teginishingizni bildiradi. Misol uchun, rassomlar ro'yxati bo'yicha oddiy qidiruvni amalga oshirish har bir rassomga bir marta qarashni anglatadi.

O'yinlar soni eng yuqori bo'lgan rassomni topish uchun siz ro'yxatdagi har bir elementni tekshirishingiz kerak. Bu siz ko'rganingizdek O(n) vaqtini oladi. Shunday qilib, sizda O(n) vaqtni oladigan operatsiyangiz bor va buni n marta bajarishingiz kerak:

Bu O(n × n) vaqt yoki O(n2) vaqtni oladi. Saralash algoritmlari juda foydali. Endi siz tartiblashingiz mumkin

  • Telefon kitobidagi ismlar

  • Sayohat sanalari

  • E-pochtalar (eng yangidan eng eskisiga)

Har safar kamroq elementlarni tekshirish

Ehtimol, siz hayron bo'lgandirsiz: operatsiyalardan o'tayotganingizda, tekshirishingiz kerak bo'lgan elementlar soni kamayib boraveradi. Oxir-oqibat, siz faqat bitta elementni tekshirishingiz kerak bo'ladi. Xo'sh, qanday qilib ish vaqti O (n2) bo'lishi mumkin? Bu yaxshi savol va javob Big O belgisidagi doimiylar bilan bog'liq. Men bu haqda 4-bobda batafsil to'xtalib o'taman, ammo bu erda asosiy narsa.

Siz har safar n ta element ro'yxatini tekshirishingiz shart emasligi to'g'ri. Siz n ta elementni tekshirasiz, keyin n -- 1, n - 2 … 2, 1. Oʻrtacha (1/2) × n elementga ega boʻlgan roʻyxatni tekshirasiz. Ish vaqti O (n × (1/2) × n). Ammo Big O notatsiyasida (1/2) kabi doimiylar e'tiborga olinmaydi (yana to'liq muhokama qilish uchun 4-bobga qarang), shuning uchun siz faqat O(n × n) yoki O(n2) ni yozasiz.

Selection sort - aniq algoritm, lekin u juda tez emas. Quicksort - bu tezroq saralash algoritmi bo'lib, u faqat O(n log n) vaqtni oladi. Bu keyingi bobda chiqadi!

EXAMPLE CODE LISTING

Biz sizga musiqa roʻyxatini tartiblash uchun kodni koʻrsatmadik, lekin quyida juda oʻxshash ishni bajaradigan baʼzi kodlar keltirilgan: massivni eng kichikdan kattagacha tartiblash. Massivdagi eng kichik elementni topish funksiyasini yozamiz:

Python

def findSmallest(arr):

  smallest = arr[0]
  smallest_index = 0

  for i in range(1, len(arr)):
    if arr[i] < smallest:
      smallest_index = i
      smallest = arr[i]

  return smallest_index

Golang

func findSmallest(arr []int) int {

    smallest := arr[0]
    smallest_index := 0

    for i := range arr {
        if arr[i] < smallest {
            smallest_index = i
            smallest = arr[i]
        }
    }

    return smallest_index
}

Endi siz ushbu funksiyadan tanlash tartibini yozish uchun foydalanishingiz mumkin:

Python

def selectionSort(arr):
    newArr = []
    for i in range len(arr):
        smallest = findSmallest(arr)
        newArr.append(arr.pop(smallest))
    return newArr

print(selectionSort([5, 3, 6, 2, 10]))

Golang

func selectionSort(arr []int) []int {
    var newArr []int
    for i := range arr {
        smallest := findSmallest(arr)
        newArr = append(newArr, arr[smallest])
        arr = append(arr[:smallest], arr[smallest+1:]...)
    }
    return newArr
}
Musics
List-1
List-2
Ordered List
Artists
n times
Min element
Selection sort