Saya tidak bisa melihat mengapa heapsort dianggap sebagai algoritma penyortiran inplace .
Maksud saya struktur data ekstra diisi dengan elemen-elemen array yang akan diurutkan yaitu heap, digunakan untuk membantu dalam ekstraksi nilai min dan proses penyortiran.
Jadi mungkin saya salah paham definisi inplace di sini?
Tetapi jenis penyisipan misalnya jelas bahwa itu adalah algoritma inplace, yaitu tidak ada memori tambahan yang diperlukan untuk elemen.
Jadi mengapa itu dianggap tidak benar?
sumber
Anda mungkin kehilangan pemahaman mendasar bahwa array dapat digunakan untuk menentukan tata letak pohon.
Misalkan Anda memiliki pohon biner, dan simpul interior berada pada indeks i dari array. Kemudian indeks array dari orang tua dan anak-anak dari simpul itu dapat ditemukan oleh:
Lihat:
http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/Sorting/heapSort.htm
Karena heap dapat disimpan dan diatur seluruhnya dalam sebuah array, maka heapsort dapat berjalan di tempat dengan menggerakkan elemen-elemen di dalam array input. Memang, heap dibangun dan dimanipulasi menggunakan array input asli.
sumber
Jika, seperti yang Anda katakan, seseorang benar-benar membutuhkan struktur tambahan untuk membangun heap maka heapsort TIDAK akan menjadi algoritma pengurutan inplace.
Namun, ini bukan masalahnya. Anda dapat membangun heap pada array yang sama seperti yang Anda inginkan, dan setelah itu Anda menerapkan algoritma heapsort, jadi itu semacam inplace.
sumber
Wikipedia - Algoritma in-place
sumber
Ini dianggap ada karena persyaratan ruangnya dapat diabaikan (konstan atau tidak sama sekali jika Anda menggunakan operasi bitwise untuk menukar item). MergeSort, misalnya, tidak ada di tempat karena set input tidak diubah di setiap iterasi dari contoh pencarian.
Cara terbaik untuk menggambarkan perbedaan antara algoritma in-place dan algoritma out-of-place mungkin dengan melihat kode pembalikan string C / C ++ berikut yang membuatnya ada di tempat (dari K&R):
Jika Anda, misalnya, membaca string input dari ujung dan menempatkan karakter dalam buffer lain, itu akan menjadi algoritma pembalikan string out-of place.
sumber