Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan algoritma isihan pemilihan dengan PHP

Bagaimana untuk melaksanakan algoritma isihan pemilihan dengan PHP

WBOY
WBOYasal
2023-07-10 23:30:05814semak imbas

Cara melaksanakan algoritma isihan pemilihan dengan PHP

Isihan pilihan ialah algoritma pengisihan yang mudah dan intuitif ialah memilih elemen terkecil (atau terbesar) daripada elemen data untuk diisih dalam setiap pas dan menyimpannya dalam hasil. Kedudukan permulaan jujukan sehingga semua elemen data yang hendak diisih disusun. Di bawah ini kami akan melaksanakan algoritma isihan pemilihan melalui kod PHP dan menerangkannya secara terperinci.

Mula-mula, mari kita lihat langkah-langkah pelaksanaan algoritma isihan pemilihan:

  1. Lintas keseluruhan tatasusunan untuk diisih, mengambil elemen pertama sebagai nilai minimum (lalai).
  2. Mengikut nilai minimum, rentas elemen yang tinggal, cari elemen yang lebih kecil daripada nilai minimum semasa dan kemas kini nilai minimum.
  3. Tukar nilai minimum dengan kedudukan yang dilalui semasa.
  4. Ulang langkah 2-3 sehingga pengisihan tatasusunan selesai.

Berikut ialah contoh kod menggunakan PHP untuk melaksanakan algoritma isihan pemilihan:

function selectionSort($arr) {
    $len = count($arr);
    
    for($i = 0; $i < $len - 1; $i++) {
        $minIndex = $i;
        
        for($j = $i + 1; $j < $len; $j++) {
            if($arr[$j] < $arr[$minIndex]) {
                $minIndex = $j;
            }
        }
        
        // Swap the minimum value with the current position
        $temp = $arr[$minIndex];
        $arr[$minIndex] = $arr[$i];
        $arr[$i] = $temp;
    }
    
    return $arr;
}

// Test the selectionSort function
$testArray = [64, 25, 12, 22, 11];
echo "Before sorting: ";
print_r($testArray);
echo "After sorting: ";
print_r(selectionSort($testArray));

Jalankan kod di atas, hasil keluarannya ialah:

Before sorting: Array ( [0] => 64 [1] => 25 [2] => 12 [3] => 22 [4] => 11 )
After sorting: Array ( [0] => 11 [1] => 12 [2] => 22 [3] => 25 [4] => 64 )

Ini adalah hasil pengisihan tatasusunan melalui algoritma isihan pemilihan. Seterusnya, mari jelaskan proses pelaksanaan khusus kod tersebut.

Dalam kod, kami mentakrifkan fungsi bernama selectionSort, yang menerima tatasusunan untuk diisih sebagai parameter dan mengembalikan tatasusunan yang diisih. selectionSort的函数,它接受一个待排序的数组作为参数,并返回排序后的数组。

首先,我们使用count函数获取到数组的长度,并将其赋值给变量$len。然后,我们使用两个嵌套的for循环来遍历整个数组。

在外部的for循环中,我们定义了一个变量$minIndex用来保存当前最小值的索引,默认为当前的循环变量$i。在内部的for循环中,我们通过比较当前元素和最小值的大小来更新最小值的索引。

当内部的for循环结束后,我们将当前最小值与当前的位置进行交换。通过使用一个临时变量$temp

Pertama, kami menggunakan fungsi count untuk mendapatkan panjang tatasusunan dan menetapkannya kepada pembolehubah $len. Kami kemudiannya menggunakan dua gelung for bersarang untuk mengulangi keseluruhan tatasusunan.

Dalam gelung for luar, kami mentakrifkan pembolehubah $minIndex untuk menyimpan indeks nilai minimum semasa, yang lalai kepada pembolehubah gelung semasa $i . Dalam gelung for dalaman, kami mengemas kini indeks nilai minimum dengan membandingkan saiz elemen semasa dan nilai minimum.

Apabila gelung for dalam tamat, kami menukar nilai minimum semasa dengan kedudukan semasa. Tukar nilai dua elemen dengan menggunakan pembolehubah sementara $temp.

Akhir sekali, kami mengembalikan tatasusunan yang diisih. 🎜🎜Kerumitan masa algoritma isihan pemilihan ialah O(n^2), dengan n ialah panjang tatasusunan yang hendak diisih. Ini kerana setiap traversal perlu mencari nilai minimum antara elemen yang tinggal dan melakukan operasi swap. Tanpa mengira keadaan awal tatasusunan, traversal n-1 mesti dilakukan. 🎜🎜Saya berharap melalui contoh kod dan penjelasan dalam artikel ini, anda boleh lebih memahami proses pelaksanaan algoritma isihan pemilihan dan dapat menggunakannya secara fleksibel dalam pembangunan sebenar. 🎜

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan algoritma isihan pemilihan dengan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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