Sobes.tech
Junior — Middle

როგორ შეიძლება ორი სორტირებული სერია შეერთდეს ისე, რომ შედეგი დარჩეს სორტირებული?

sobes.tech AI

პასუხი AI-სგან

ორ სორტირებულ სერიის ერთობლიობა ერთ სორტირებულ სერიისადმი, შეგიძლიათ გამოიყენოთ შერწყმის ალგორითმი (merge), რომელიც მუშაობს ლინეურულ დროში.

იდეა:

  • ორი სორტირებული მასივი ან სია არსებობს.
  • თითოეულისთვის ვიყენებთ ორი მაჩვენებელს.
  • ვადარებთ მიმდინარე ელემენტებს, უმცირესს ვამატებთ შედეგში და შესაბამის მაჩვენებელს ვაწევრებთ.
  • ვიმეორებთ, სანამ ორივე მასივი არ გავივლით.

კოტლინში მაგალითი:

fun mergeSortedLists(a: List<Int>, b: List<Int>): List<Int> {
    val result = mutableListOf<Int>()
    var i = 0
    var j = 0
    while (i < a.size && j < b.size) {
        if (a[i] <= b[j]) {
            result.add(a[i])
            i++
        } else {
            result.add(b[j])
            j++
        }
    }
    // დარჩენილი ელემენტების დამატება
    while (i < a.size) result.add(a[i++])
    while (j < b.size) result.add(b[j++])
    return result
}