Rumah hujung hadapan web tutorial js Perbincangan ringkas mengenai pelaksanaan lapan pengisihan utama dalam kemahiran javascript_javascript

Perbincangan ringkas mengenai pelaksanaan lapan pengisihan utama dalam kemahiran javascript_javascript

May 16, 2016 pm 04:02 PM
javascript algoritma pengisihan

Sebulan memasuki tahun persekolahan, saya telah mengimpikan soalan algoritma struktur data muncul dalam peperiksaan bertulis berkali-kali Saya lebih takut kepada struktur data daripada mana-mana "hantu". Haha, nampaknya sangat perlu untuk mengkaji semula struktur data yang biasa digunakan untuk mengelakkan "mimpi ngeri" daripada menjadi kenyataan.

Tidak perlu diperkatakan kepentingan asas pengaturcaraan seperti struktur data, mari kita terus ke intinya.

Algoritma pengisihan dibahagikan kepada pengisihan dalaman dan pengisihan luaran. Pengisihan dalaman menggunakan memori, dan hanya pengisihan dalaman dibincangkan di sini.

1. Isih sisipan: isihan sisipan langsung dan isihan Bukit

2. Isih pilihan: isihan pilihan mudah dan isihan timbunan

3. Isih pertukaran: isihan gelembung dan isihan pantas

4, cantumkan isihan

5, jenis radix

Isihan sisipan langsung

Idea asas: Dalam set nombor yang hendak diisih, dengan mengandaikan bahawa nombor sebelumnya (n-1) [n>=2] sudah tersusun, mula-mula masukkan nombor ke-n ke dalam nombor tertib sebelumnya, Jadi bahawa n nombor ini juga disusun. Ulangi kitaran ini sehingga semuanya teratur.

Isih bukit

Idea asas: Algoritma membahagikan set nombor terlebih dahulu untuk diisih kepada beberapa kumpulan mengikut kenaikan tertentu d (n/2, n ialah nombor yang hendak diisih), dan subskrip yang direkodkan dalam setiap kumpulan berbeza dengan d . Lakukan isihan sisipan terus pada semua elemen dalam setiap kumpulan, kemudian kumpulkan mereka dengan kenaikan yang lebih kecil (d/2), dan lakukan isihan sisipan terus pada setiap kumpulan. Apabila kenaikan dikurangkan kepada 1, pengisihan selesai selepas pengisihan sisipan terus.

Isih pilihan mudah

Idea asas: Daripada set nombor yang hendak diisih, pilih nombor terkecil dan tukarkannya dengan nombor di kedudukan pertama, kemudian cari nombor terkecil di antara nombor yang tinggal dan tukarkannya dengan nombor di kedudukan kedua , jadi Cari haha ​​​​hingga nombor kedua hingga nombor terakhir dan nombor terakhir.

Isih timbunan

Idea asas: Isihan timbunan ialah jenis pemilihan pokok, yang merupakan penambahbaikan yang berkesan pada isihan pemilihan langsung.

Jujukan (h1, h2,...,hn) dengan n elemen, jika dan hanya jika (hi>=h2i,hi>=2i 1) atau (hi<=h2i,hi<=2i 1 ) ( i=1,2,...,n/2) dipanggil timbunan. Hanya timbunan yang memenuhi syarat dahulu dibincangkan di sini. Ia boleh dilihat daripada definisi timbunan bahawa elemen atas timbunan (iaitu, elemen pertama) mestilah item terbesar (timbunan atas besar). Pokok binari yang lengkap boleh mewakili struktur timbunan dengan sangat intuitif. Bahagian atas timbunan ialah akar, dan yang lain adalah subpokok kiri dan subpokok kanan. Pada mulanya, urutan nombor yang hendak diisih dianggap sebagai pokok binari yang disimpan secara berurutan, dan susunan penyimpanannya dilaraskan supaya ia menjadi timbunan Pada masa ini, bilangan nod akar timbunan adalah yang terbesar. Kemudian tukar nod akar dengan nod terakhir timbunan. Kemudian laraskan semula nombor sebelumnya (n-1) untuk membentuk timbunan. Dan seterusnya, sehingga terdapat timbunan dengan hanya dua nod, dan mereka ditukar, dan akhirnya urutan tertib n nod diperoleh. Daripada huraian algoritma, pengisihan timbunan memerlukan dua proses, satu adalah untuk menubuhkan timbunan, dan satu lagi adalah untuk menukar kedudukan antara bahagian atas timbunan dan elemen terakhir timbunan. Jadi jenis timbunan terdiri daripada dua fungsi. Satu ialah fungsi penembusan untuk membina timbunan, dan satu lagi ialah fungsi untuk memanggil berulang kali fungsi penembusan untuk melaksanakan pengisihan.

Isih gelembung

Idea asas: Dalam satu set nombor yang hendak diisih, bandingkan dan laraskan dua nombor bersebelahan dalam urutan dari atas ke bawah untuk semua nombor dalam julat yang belum diisih, supaya lebih besar Sedikit tenggelam, dan yang lebih kecil naik. Iaitu: apabila dua nombor bersebelahan dibandingkan dan didapati pesanan mereka bertentangan dengan keperluan pesanan, ia ditukar.

Isih Pantas

Idea asas: Pilih elemen penanda aras, biasanya elemen pertama atau elemen terakhir, dan bahagikan urutan untuk diisih kepada dua bahagian melalui satu imbasan, satu bahagian lebih kecil daripada elemen penanda aras dan bahagian lain lebih besar daripada atau sama dengan elemen penanda aras Pada masa ini, penanda aras Elemen berada dalam kedudukan diisih yang betul, dan kemudian kedua-dua bahagian yang dibahagikan diisih secara rekursif dengan cara yang sama.

Gabung isihan

Pengisihan asas: Kaedah pengisihan gabungan adalah untuk menggabungkan dua (atau lebih) senarai tertib ke dalam senarai tertib baharu, iaitu urutan yang hendak diisih dibahagikan kepada beberapa urutan, setiap urutan mempunyai urutan. Kemudian gabungkan urutan tertib ke dalam urutan tertib keseluruhan.

Isih radix

Idea asas: Satukan semua nilai untuk dibandingkan (integer positif) dengan panjang digit yang sama dan tambah sifar di hadapan nombor dengan digit yang lebih pendek. Kemudian, bermula dari bit terendah, susun satu persatu. Dengan cara ini, selepas mengisih daripada bit terendah ke bit tertinggi, jujukan menjadi jujukan tertib.

Alamat tunjuk cara kod: http://lovermap.sinaapp.com/test/sort.html

Kini kami menganalisis kestabilan 8 algoritma pengisihan.

(Netizen diminta memahami kestabilan pengisihan dengan menggabungkan idea asas pengisihan sebelum ini (idea asas 8 jenis pengisihan telah disebut sebelum ini dan tidak akan diulang di sini) jika tidak mungkin agak kabur)

(1) Isih sisipan langsung : Secara umum isihan sisipan, perbandingan bermula dari elemen terakhir urutan tertib Jika ia lebih besar daripadanya, ia dimasukkan terus di belakangnya, jika tidak, ia akan kekal membandingkan ke hadapan. Jika elemen yang sama dengan elemen yang dimasukkan ditemui, ia dimasukkan selepas elemen yang sama. Isihan sisipan adalah stabil.

(2) Isih bukit : Isih bukit ialah isihan sisipan unsur mengikut panjang penyegerakan yang berbeza Isihan sisipan adalah stabil dan tidak akan mengubah susunan relatif unsur yang sama, tetapi dalam Semasa yang berbeza proses isihan sisipan, unsur yang sama mungkin bergerak dalam jenis sisipan masing-masing, dan kestabilan akan musnah, jadi isihan Bukit tidak stabil.

(3) Pengisihan pemilihan mudah : Dalam satu pilihan, jika elemen semasa lebih kecil daripada elemen, dan elemen kecil muncul di belakang elemen yang sama dengan elemen semasa, maka ia akan stabil selepas pertukaran Seks musnah. Ia mungkin agak kabur hanya untuk mengatakannya, mari lihat contoh kecil: 858410, dalam imbasan pertama, elemen pertama 8 akan ditukar dengan 4, maka susunan relatif kedua-dua 8 dalam urutan asal adalah tidak konsisten dengan jujukan asal, jadi pengisihan pemilihan tidak mungkin Stablize.

(4) Isihan timbunan : Proses pengisihan timbunan adalah untuk memilih yang terbesar (timbunan atas besar) atau yang terkecil (timbunan atas kecil) bermula dari n/2 dan nod anaknya dengan jumlah 3 nilai Ini Pilihan antara 3 elemen pastinya tidak memusnahkan kestabilan. Tetapi apabila memilih elemen untuk nod induk n/2-1, n/2-2, ..., ada kemungkinan nod induk n/2 menukar elemen seterusnya, dan n/2-1 Nod induk tidak tukar elemen yang sama pada penghujungnya, jadi pengisihan timbunan tidak stabil.

(5) Isih gelembung : Seperti yang dapat dilihat daripada kandungan sebelumnya, isihan gelembung ialah perbandingan dua elemen bersebelahan, dan pertukaran juga berlaku antara kedua-dua elemen ini jika kedua-dua elemen adalah sama , tak perlu tukar. Jadi jenis gelembung adalah stabil.

(6) Isih pantas : Apabila elemen pusat ditukar dengan elemen dalam jujukan, ia berkemungkinan besar akan mengganggu kestabilan elemen sebelumnya. Mari lihat contoh kecil: 6 4 4 5 4 7 8 9. Dalam pas pengisihan pertama, pertukaran elemen pusat 6 dan 4 ketiga akan memusnahkan jujukan asal unsur 4, jadi isihan pantas tidak stabil.

(7) Isih Gabung : Dalam sub-lajur yang terurai, apabila terdapat 1 atau 2 elemen, 1 elemen tidak akan ditukar, dan 2 elemen tidak akan ditukar jika saiznya sama. . Semasa proses penggabungan jujukan, jika kedua-dua elemen semasa adalah sama, kami menyimpan unsur-unsur jujukan sebelumnya di hadapan jujukan hasil, jadi isihan gabungan juga stabil.

(8) Isih Radix : Isih mengikut tertib rendah dahulu, dan kemudian kumpulkan mengikut urutan tinggi, dan kemudian kumpulkan, sehingga tertib tertinggi. Kadangkala beberapa atribut mempunyai susunan keutamaan Ia diisih mengikut keutamaan rendah dahulu, dan kemudian mengikut keutamaan tinggi Urutan terakhir ialah mereka yang mempunyai keutamaan tinggi didahulukan, dan yang mempunyai keutamaan tinggi dan keutamaan yang sama didahulukan. Isihan Radix adalah berdasarkan isihan berasingan dan koleksi berasingan, jadi ia stabil.

Ringkasan klasifikasi, kestabilan, kerumitan masa dan kerumitan ruang 8 jenis pengisihan:

Di atas adalah keseluruhan kandungan artikel ini, saya harap anda semua menyukainya.

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript Dec 17, 2023 pm 02:54 PM

Cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian Pengenalan: Dengan perkembangan teknologi yang berterusan, teknologi pengecaman pertuturan telah menjadi bahagian penting dalam bidang kecerdasan buatan. Sistem pengecaman pertuturan dalam talian berdasarkan WebSocket dan JavaScript mempunyai ciri kependaman rendah, masa nyata dan platform merentas, dan telah menjadi penyelesaian yang digunakan secara meluas. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian.

WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata Dec 17, 2023 pm 05:30 PM

WebSocket dan JavaScript: Teknologi utama untuk merealisasikan sistem pemantauan masa nyata Pengenalan: Dengan perkembangan pesat teknologi Internet, sistem pemantauan masa nyata telah digunakan secara meluas dalam pelbagai bidang. Salah satu teknologi utama untuk mencapai pemantauan masa nyata ialah gabungan WebSocket dan JavaScript. Artikel ini akan memperkenalkan aplikasi WebSocket dan JavaScript dalam sistem pemantauan masa nyata, memberikan contoh kod dan menerangkan prinsip pelaksanaannya secara terperinci. 1. Teknologi WebSocket

Cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata Cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata Dec 17, 2023 pm 12:09 PM

Pengenalan kepada cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata: Dengan populariti Internet dan kemajuan teknologi, semakin banyak restoran telah mula menyediakan perkhidmatan pesanan dalam talian. Untuk melaksanakan sistem pesanan dalam talian masa nyata, kami boleh menggunakan teknologi JavaScript dan WebSocket. WebSocket ialah protokol komunikasi dupleks penuh berdasarkan protokol TCP, yang boleh merealisasikan komunikasi dua hala masa nyata antara pelanggan dan pelayan. Dalam sistem pesanan dalam talian masa nyata, apabila pengguna memilih hidangan dan membuat pesanan

Bagaimana untuk melaksanakan sistem tempahan dalam talian menggunakan WebSocket dan JavaScript Bagaimana untuk melaksanakan sistem tempahan dalam talian menggunakan WebSocket dan JavaScript Dec 17, 2023 am 09:39 AM

Cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem tempahan dalam talian Dalam era digital hari ini, semakin banyak perniagaan dan perkhidmatan perlu menyediakan fungsi tempahan dalam talian. Adalah penting untuk melaksanakan sistem tempahan dalam talian yang cekap dan masa nyata. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem tempahan dalam talian dan memberikan contoh kod khusus. 1. Apakah itu WebSocket? WebSocket ialah kaedah dupleks penuh pada sambungan TCP tunggal.

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Dec 17, 2023 pm 05:13 PM

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Pengenalan: Hari ini, ketepatan ramalan cuaca sangat penting kepada kehidupan harian dan membuat keputusan. Apabila teknologi berkembang, kami boleh menyediakan ramalan cuaca yang lebih tepat dan boleh dipercayai dengan mendapatkan data cuaca dalam masa nyata. Dalam artikel ini, kita akan mempelajari cara menggunakan teknologi JavaScript dan WebSocket untuk membina sistem ramalan cuaca masa nyata yang cekap. Artikel ini akan menunjukkan proses pelaksanaan melalui contoh kod tertentu. Kami

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Jan 05, 2024 pm 06:08 PM

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

Bagaimana untuk menggunakan insertBefore dalam javascript Bagaimana untuk menggunakan insertBefore dalam javascript Nov 24, 2023 am 11:56 AM

Penggunaan: Dalam JavaScript, kaedah insertBefore() digunakan untuk memasukkan nod baharu dalam pepohon DOM. Kaedah ini memerlukan dua parameter: nod baharu untuk dimasukkan dan nod rujukan (iaitu nod di mana nod baharu akan dimasukkan).

JavaScript dan WebSocket: Membina sistem pemprosesan imej masa nyata yang cekap JavaScript dan WebSocket: Membina sistem pemprosesan imej masa nyata yang cekap Dec 17, 2023 am 08:41 AM

JavaScript ialah bahasa pengaturcaraan yang digunakan secara meluas dalam pembangunan web, manakala WebSocket ialah protokol rangkaian yang digunakan untuk komunikasi masa nyata. Menggabungkan fungsi berkuasa kedua-duanya, kami boleh mencipta sistem pemprosesan imej masa nyata yang cekap. Artikel ini akan memperkenalkan cara untuk melaksanakan sistem ini menggunakan JavaScript dan WebSocket, dan memberikan contoh kod khusus. Pertama, kita perlu menjelaskan keperluan dan matlamat sistem pemprosesan imej masa nyata. Katakan kita mempunyai peranti kamera yang boleh mengumpul data imej masa nyata

See all articles