Rumah > pembangunan bahagian belakang > masalah PHP > Contoh untuk menerangkan cara menggunakan php untuk melaksanakan pengisihan Hill

Contoh untuk menerangkan cara menggunakan php untuk melaksanakan pengisihan Hill

PHPz
Lepaskan: 2023-04-04 21:16:02
asal
413 orang telah melayarinya

1. Apakah itu pengisihan bukit

Isihan bukit, juga dipanggil pengisihan tambahan yang dikurangkan, ialah pelaksanaan pengisihan sisipan yang bercekapan tinggi. Memandangkan pengisihan sisipan tidak cekap semasa memproses data berskala besar, pengisihan Hill mengembangkan selang pengisihan sisipan dengan membahagikan urutan dan melaksanakan pengisihan sisipan secara berasingan, sekali gus mengurangkan bilangan elemen yang bergerak dan meningkatkan kecekapan pengisihan.

2. Idea asas penyisihan Hill

Idea pengisihan yang digunakan oleh pengisihan Hill boleh difahami sebagai memasukkan dan mengisih berbilang urutan yang dipisahkan oleh h. Gunakan h yang lebih kecil untuk membahagi setiap kali Selepas setiap urutan dimasukkan dan diisih, tukar nilai h dan bahagikan semula jujukan sehingga h=1 pada akhirnya untuk melengkapkan pengisihan.

3. Pelaksanaan PHP pengisihan Bukit

Berikut ialah pelaksanaan kod PHP pengisihan Bukit:

function shellSort($arr) {
    $length = count($arr);
    // 初始时gap最大,按照插入排序的方式进行排序
    for ($gap = floor($length / 2); $gap > 0; $gap = floor($gap / 2)) {
        for ($i = $gap; $i < $length; $i++) {
            $j = $i;
            while ($j - $gap >= 0 && $arr[$j] < $arr[$j - $gap]) {
                // 插入排序
                $tmp = $arr[$j];
                $arr[$j] = $arr[$j - $gap];
                $arr[$j - $gap] = $tmp;
                $j -= $gap;
            }
        }
    }
    return $arr;
}
Salin selepas log masuk

Dua lapisan gelung digunakan dalam kod di atas. Gelung peringkat pertama menggunakan pembolehubah $gap untuk membahagi dan mengisih tatasusunan, dan gelung tahap kedua membandingkan dan menggerakkan elemen. Kerumitan masa bagi gelung dua peringkat ialah $O(n^2)$.

4. Kerumitan masa pengisihan Bukit

Di bawah urutan yang berbeza, kerumitan masa pengisihan Bukit juga berbeza. Kerumitan masa pengisihan Hill ialah $O(n logn)$ dalam kes terbaik, $O(n^2)$ dalam kes terburuk, dan $O(n log^2n)$ dalam kes purata.

5. Kelebihan dan Kelemahan Isih Bukit

Kebaikan:

  • Isih bukit ialah algoritma pengisihan yang sangat cekap Berbanding dengan pengisihan pemilihan dan pengisihan risiko adalah lebih pantas.
  • Jarak pertukaran dalam pengisihan Bukit adalah lebih pendek, yang mengurangkan bilangan perbandingan elemen dan bilangan pergerakan elemen.

Kelemahan:

  • Kerumitan masa pengisihan Bukit sukar untuk dianalisis dengan tepat.
  • Pelaksanaan kod pengisihan Hill lebih rumit daripada algoritma pengisihan lain.

6. Ringkasan

Isih bukit ialah versi pengisihan sisipan yang cekap Dengan memperkenalkan konsep selang, ia mengurangkan bilangan perbandingan dan pergerakan elemen, dengan itu meningkatkan kecekapan pengisihan. Kerumitan masa pengisihan Bukit dipengaruhi oleh jujukan, dan sukar untuk menjalankan analisis yang tepat. Oleh itu, dalam pengekodan sebenar, adalah perlu untuk memilih urutan selang yang sesuai mengikut saiz dan ciri-ciri data untuk mencapai kesan pengisihan yang optimum.

Atas ialah kandungan terperinci Contoh untuk menerangkan cara menggunakan php untuk melaksanakan pengisihan Hill. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan