Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengisih tatasusunan dalam PHP tanpa menggunakan fungsi

Bagaimana untuk mengisih tatasusunan dalam PHP tanpa menggunakan fungsi

PHPz
PHPzasal
2023-04-27 09:03:10689semak imbas

PHP ialah bahasa pengaturcaraan yang digunakan secara meluas dengan banyak fungsi berkuasa untuk memudahkan pengisihan tatasusunan. Walau bagaimanapun, dalam beberapa kes kita mungkin perlu mengisih tatasusunan tanpa menggunakan fungsi. Dalam artikel ini, kita akan membincangkan cara mengisih tatasusunan dalam PHP tanpa menggunakan fungsi.

1. Kaedah pengisihan gelembung

Pengisihan buih ialah algoritma pengisihan yang mudah adalah untuk membandingkan elemen bersebelahan dan menukarnya jika ia berada dalam susunan yang salah. Untuk tatasusunan panjang n, paling banyak n-1 pusingan perbandingan dan operasi pertukaran dilakukan Selepas setiap pusingan, elemen ekor kawasan tidak tertib akan menjadi elemen kepala kawasan tertib.

Berikut ialah kod untuk melaksanakan isihan gelembung menggunakan PHP menggunakan tertib menaik sebagai contoh:

function bubbleSort(&$arr){
    $len = count($arr); //获取数组长度
    for($i=0;$i<$len-1;$i++){ //需要比较n-1轮
        for($j=0;$j<$len-$i-1;$j++){ //每一轮需要比较n-i-1次
            if($arr[$j]>$arr[$j+1]){ //如果前一个元素大于后一个元素,交换位置
                $tmp = $arr[$j+1];
                $arr[$j+1] = $arr[$j];
                $arr[$j] = $tmp;
            }
        }
    }
}

Kerumitan masa kod di atas ialah O(n^2), yang bukan algoritma pengisihan yang optimum. Tetapi dalam beberapa kes, pelaksanaan kod isihan gelembung agak mudah dan boleh digunakan untuk mengisih tatasusunan kecil.

2. Kaedah pengisihan pemilihan

Pengisihan pilihan ialah algoritma pengisihan yang mudah adalah untuk memilih elemen terkecil (atau terbesar) daripada urutan yang akan diisih dan memasukkannya ke dalam urutan. urutan. Untuk tatasusunan panjang n, pusingan n-1 perbandingan dan operasi pertukaran diperlukan Selepas setiap pusingan perbandingan, elemen kepala kawasan tidak tersusun akan menjadi elemen ekor bagi kawasan tertib.

Berikut ialah kod untuk melaksanakan isihan pemilihan menggunakan PHP menggunakan tertib menaik sebagai contoh:

function selectSort(&$arr){
    $len = count($arr);//获取数组长度
    for($i=0;$i<$len-1;$i++){//需要比较n-1轮
        $minIndex=$i;//用来存储最小元素的下标
        for($j=$i+1;$j<$len;$j++){
            if($arr[$j]<$arr[$minIndex]){//如果有小于当前最小值的元素,更新minIndex
                $minIndex=$j;
            }
        }
        //将最小元素和无序区域的头部元素交换位置
        $tmp = $arr[$minIndex];
        $arr[$minIndex] = $arr[$i];
        $arr[$i] = $tmp;
    }
}

Kerumitan masa kod di atas ialah O(n^2), yang bukan algoritma pengisihan optimum. Walau bagaimanapun, kaedah isihan pemilihan adalah mudah untuk dilaksanakan dan mudah difahami, dan boleh digunakan untuk mengisih tatasusunan kecil.

3. Kaedah isihan sisipan

Isih sisipan ialah algoritma pengisihan yang mudah adalah untuk memasukkan sekeping data ke dalam urutan tersusun yang telah diisih. Untuk tatasusunan panjang n, pusingan n-1 perbandingan dan operasi pergerakan diperlukan Selepas setiap pusingan perbandingan, elemen kepala kawasan tidak tertib akan menjadi elemen ekor bagi kawasan tertib.

Berikut ialah kod untuk melaksanakan isihan sisipan menggunakan PHP, mengambil tertib menaik sebagai contoh:

function insertSort(&$arr){
    $len = count($arr);//获取数组长度
    for($i=1;$i<$len;$i++){//需要将n-1个元素插入到有序区域
        $tmp = $arr[$i];//用一个临时变量存储待插入的元素
        for($j=$i-1;$j>=0;$j--){//将tmp插入到合适的位置
            if($tmp<$arr[$j]){
                $arr[$j+1]=$arr[$j];//将大于tmp的元素向后移动一位
            }else{
                break;//找到了合适的位置,退出循环
            }
        }
        $arr[$j+1]=$tmp;//将tmp插入到合适的位置
    }
}

Kerumitan masa kod di atas ialah O(n^2), yang bukan algoritma yang optimum. Walau bagaimanapun, kaedah isihan sisipan adalah mudah untuk dilaksanakan dan boleh digunakan untuk mengisih tatasusunan kecil dan tatasusunan separa tertib.

4. Kaedah pengisihan pantas

Isih cepat ialah algoritma pengisihan yang cekap ialah membahagikan tatasusunan kepada dua urutan melalui satu isihan, di mana unsur-unsur urutan kiri adalah kurang. daripada Unsur asas, unsur-unsur susulan kanan semuanya lebih besar daripada unsur asas, kemudian susulan kiri dan kanan diisih secara rekursif, dan akhirnya kedua-dua urutan tertib digabungkan menjadi urutan tertib. Kerumitan masa isihan pantas ialah O(nlogn).

Berikut ialah kod untuk melaksanakan isihan pantas menggunakan PHP menggunakan tertib menaik sebagai contoh:

function quickSort(&$arr,$left,$right){
    if($left<$right){
        $i=$left;$j=$right;//选择一个基准元素,初始化左右指针
        $pivot=$arr[$i];//将基准元素存储到临时变量pivot
        while($i<$j){
            while($i<$j && $arr[$j]>=$pivot){//逆序查找比基准元素小的元素
                $j--;
            }
            if($i<$j){
                $arr[$i++]=$arr[$j];
            }
            while($i<$j && $arr[$i]<=$pivot){//顺序查找比基准元素大的元素
                $i++;
            }
            if($i<$j){
                $arr[$j--]=$arr[$i];
            }
        }
        $arr[$i]=$pivot;//将基准元素插入到左右子序列的交界处
        quickSort($arr,$left,$i-1);//对左子序列递归排序
        quickSort($arr,$i+1,$right);//对右子序列递归排序
    }
}

Kerumitan masa kod di atas ialah O(nlogn), yang merupakan algoritma pengisihan yang lebih baik . Proses pelaksanaan isihan pantas adalah lebih rumit, tetapi prestasinya adalah yang terbaik dan boleh digunakan untuk mengisih tatasusunan pelbagai saiz.

Ringkasan:

Di atas memperkenalkan empat kaedah untuk mengisih tatasusunan tanpa menggunakan fungsi PHP ia adalah isihan gelembung, isihan pemilihan, isihan sisipan dan isihan pantas. Dalam aplikasi praktikal, kita boleh memilih algoritma pengisihan yang sesuai berdasarkan saiz tatasusunan dan keperluan pengisihan. Perlu diingat bahawa walaupun algoritma ini tidak bergantung pada fungsi terbina dalam PHP, isu seperti masa pelaksanaan dan penggunaan memori perlu dipertimbangkan dalam penggunaan sebenar.

Atas ialah kandungan terperinci Bagaimana untuk mengisih tatasusunan dalam PHP tanpa menggunakan fungsi. 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