Rumah php教程 php手册 PHP排序算法的复习和总结

PHP排序算法的复习和总结

Jun 06, 2016 pm 08:40 PM
algoritma pengisihan

对于PHP中对数组的元素进行排序,这个是很经常用到的,之前的项目中也有,而且对于几种排序我们都是用的是asort arsort 等PHP原生函数,没有自己去实现,所以就对一下的几个函数进行总结,这个会不断的进行补充,自己也可以好好的复习和总结

直接上代码吧!
代码如下:
/*
* 插入排序(一维数组)
* 每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当的位置,使数列依然有序;直到待排序的数据元素全部插入完成为止。
*/
function insertSort($arr){
if(!is_array($arr) || count($arr)==0){
return $arr;
}
$count = count($arr);
for($i=1; $iif(isset($arr[$i])){
   $tmp = $arr[$i]; //获取后一个元素的值
   $j = $i - 1; //获取前面的下标
   while($arr[$j] > $tmp){ //如果前面一个比后面一个大, 这里是从小到大
    $arr[$j+1] = $arr[$j]; //把小的元素和前面的对换,直到移动到合适的位置,在移动下一个
    $arr[$j] = $tmp;
    $j--;
   }
}
}
return $arr;
}
  
/*
* 选择排序(一维数组)
* 每一趟从待排序的数据元素中选出最小(最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
*/
function selectSort($arr){
if(!is_array($arr) || count($arr) == 0)
{
return $arr;
}
$count = count($arr);
for($i=0; $i$k = $i;
for($j=$i+1; $j  if ($arr[$k] > $arr[$j])
    $k = $j; //找出最小的
   if ($k != $i){
     $tmp = $arr[$i];
     $arr[$i] = $arr[$k];
     $arr[$k] = $tmp;
   }
}
}
return $arr;
}
/*  
* 冒泡排序(一维数组)
* 两两比较待排序数据元素的大小,发现两个数据元素的次序相反即进行交换,直到没有反序的数据元素为止
*/
function bubbleSort($array){
$count = count($array);
if ($count return false;
}
for($i=0; $ifor($j=$count-1; $j>$i; $j--){
   if ($array[$j]     $tmp = $array[$j];
    $array[$j] = $array[$j-1];
    $array[$j-1] = $tmp;
   }
}
}
return $array;
}
  
/*
* 快速排序(一维数组)
*
*/
function quickSort($array){
if (count($array) return $array;
}
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $i  if ($array[$i]    $left_arr[] = $array[$i];
  }else{
 $right_arr[] = $array[$i];
}
}
$left_arr = quickSort($left_arr);
$right_arr = quickSort($right_arr);
return array_merge($left_arr, array($key), $right_arr);
}
/**
* 按照元素的值进行排序
* strOrder 为排列的顺序 asc 升序 desc 降序
*/
function sortByVal($arr,$strOrder='asc')
{
if(!is_array($arr) || count($arr)==0)
{
return $arr;
}
$arrReturn = array();
foreach($arr as $key=>$val)
{
$arrKey[] = $key;
$arrVal[] = $val;
}
$count = count($arrVal);
if($count)
{
//创建key的顺序数组
for($key=0;$key{
$arrKeyMap[$key] = $key;
}
//对值进行排序
for($i=0;$i{
for($j = $count-1; $j>$i;$j--)
{
//$bol = $strOrder == 'asc' ? $arrVal[$j]$arrVal[$j-1];
if($bol){
$tmp = $arrVal[$j];
$arrVal[$j] = $arrVal[$j-1];
$arrVal[$j-1] = $tmp;
//值的冒泡排序,引起key的数组的交互
$keytmp = $arrKeyMap[$j];
$arrKeyMap[$j] = $arrKeyMap[$j-1];
$arrKeyMap[$j-1] = $keytmp;
}
}
}
if(count($arrKeyMap))
{
foreach ($arrKeyMap as $val)
{
$arrReturn[] = $arrKey[$val];
}
}
return $arrReturn;
}
}
/**
* 使用原生的函数进行数组按照值进行排列
*/
function arraySortByVal($arr,$keys,$type='asc'){
$keysvalue = $new_array = array();
foreach ($arr as $k=>$v){
$keysvalue[$k] = $v[$keys];
}
if($type == 'asc'){
asort($keysvalue);
}else{
arsort($keysvalue);
}
reset($keysvalue);
foreach ($keysvalue as $k=>$v){
$new_array[$k] = $arr[$k];
}
return $new_array;
}

对于下面的2个对于array的值进行排序的方法一个是自己实现的一个是使用了原生的PHP函数的,其实排序对于少量数据一般就单页的数据量的数据还是可以的,如果涉及到大量的数据的排序,建议可以整合到MYSQL的基础类中来进行。
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)

Isu reka bentuk eksperimen yang kompleks dalam pasaran dua belah Kuaishou Isu reka bentuk eksperimen yang kompleks dalam pasaran dua belah Kuaishou Apr 15, 2023 pm 07:40 PM

1. Latar belakang masalah 1. Pengenalan kepada eksperimen pasaran dua belah Pasaran dua belah, iaitu platform, merangkumi dua peserta, pengeluar dan pengguna, dan kedua-dua pihak mempromosikan satu sama lain. Sebagai contoh, Kuaishou mempunyai pengeluar video dan pengguna video, dan kedua-dua identiti mungkin bertindih pada tahap tertentu. Eksperimen dua hala ialah kaedah eksperimen yang menggabungkan kumpulan di pihak pengeluar dan pengguna. Percubaan dua hala mempunyai kelebihan berikut: (1) Kesan strategi baharu pada dua aspek boleh dikesan serentak, seperti perubahan dalam DAU produk dan bilangan orang yang memuat naik karya. Platform dua hala selalunya mempunyai kesan rangkaian rentas sisi Semakin ramai pembaca, semakin aktif pengarang, dan semakin aktif pengarang, semakin ramai pembaca yang akan mengikuti. (2) Limpahan kesan dan pemindahan boleh dikesan. (3) Bantu kami lebih memahami mekanisme tindakan Percubaan AB itu sendiri tidak boleh memberitahu kami hubungan antara sebab dan akibat, sahaja

Cara menapis dan mengisih data dalam pembangunan teknologi Vue Cara menapis dan mengisih data dalam pembangunan teknologi Vue Oct 09, 2023 pm 01:25 PM

Cara menapis dan mengisih data dalam pembangunan teknologi Vue Dalam pembangunan teknologi Vue, penapisan dan pengisihan data adalah fungsi yang sangat biasa dan penting. Melalui penapisan dan pengisihan data, kami boleh membuat pertanyaan dan memaparkan maklumat yang kami perlukan dengan cepat, meningkatkan pengalaman pengguna. Artikel ini akan memperkenalkan cara menapis dan mengisih data dalam Vue, dan menyediakan contoh kod khusus untuk membantu pembaca memahami dan menggunakan fungsi ini dengan lebih baik. 1. Penapisan data Penapisan data merujuk kepada penapisan data yang memenuhi keperluan berdasarkan syarat tertentu. Dalam Vue, kita boleh lulus comp

Google menggunakan AI untuk memecahkan meterai sepuluh tahun algoritma pengisihan Ia dilaksanakan bertrilion kali setiap hari, tetapi netizen mengatakan ia adalah penyelidikan yang paling tidak realistik? Google menggunakan AI untuk memecahkan meterai sepuluh tahun algoritma pengisihan Ia dilaksanakan bertrilion kali setiap hari, tetapi netizen mengatakan ia adalah penyelidikan yang paling tidak realistik? Jun 22, 2023 pm 09:18 PM

Menganjurkan |. Nuka-Cola, Chu Xingjuan Rakan-rakan yang telah mengikuti kursus asas sains komputer mestilah secara peribadi mereka bentuk algoritma pengisihan - iaitu, menggunakan kod untuk menyusun semula item dalam senarai tidak tertib dalam susunan menaik atau menurun. Ia adalah satu cabaran yang menarik, dan terdapat banyak cara yang mungkin untuk melakukannya. Banyak masa telah dilaburkan untuk memikirkan cara untuk menyelesaikan tugasan pengasingan dengan lebih cekap. Sebagai operasi asas, algoritma pengisihan dibina ke dalam perpustakaan standard kebanyakan bahasa pengaturcaraan. Terdapat banyak teknik dan algoritma pengisihan yang berbeza digunakan dalam pangkalan kod di seluruh dunia untuk menyusun sejumlah besar data dalam talian, tetapi sekurang-kurangnya setakat perpustakaan C++ yang digunakan dengan pengkompil LLVM, kod pengisihan tidak berubah dalam lebih daripada satu dekad. Baru-baru ini, pasukan Google DeepMindAI kini telah membangunkan a

Cara menggunakan algoritma isihan radix dalam C++ Cara menggunakan algoritma isihan radix dalam C++ Sep 19, 2023 pm 12:15 PM

Cara menggunakan algoritma isihan radix dalam C++ Algoritma isihan radix ialah algoritma isihan bukan perbandingan yang melengkapkan isihan dengan membahagikan elemen untuk diisih kepada set digit yang terhad. Dalam C++, kita boleh menggunakan algoritma isihan radix untuk mengisih set integer. Di bawah ini kita akan membincangkan secara terperinci cara melaksanakan algoritma isihan radix, dengan contoh kod tertentu. Idea algoritma Idea algoritma pengisihan radix adalah untuk membahagikan elemen untuk diisih ke dalam set bit digital yang terhad, dan kemudian mengisih elemen pada setiap bit secara bergilir-gilir. Pengisihan pada setiap bit selesai

Bagaimana untuk melaksanakan algoritma isihan pemilihan dalam C# Bagaimana untuk melaksanakan algoritma isihan pemilihan dalam C# Sep 20, 2023 pm 01:33 PM

Cara melaksanakan algoritma isihan pemilihan dalam Isih Pemilihan (SelectionSort) ialah algoritma pengisihan yang mudah dan intuitif. Idea asasnya ialah memilih elemen terkecil (atau terbesar) daripada unsur-unsur yang akan diisih setiap kali dan meletakkannya pada penghujung. urutan yang disusun. Ulangi proses ini sehingga semua elemen diisih. Mari ketahui lebih lanjut tentang cara melaksanakan algoritma isihan pemilihan dalam C#, bersama-sama dengan contoh kod tertentu. Mencipta kaedah isihan pemilihan Pertama, kita perlu mencipta kaedah untuk melaksanakan isihan pemilihan. Kaedah ini menerima a

Swoole Advanced: Cara menggunakan multi-threading untuk melaksanakan algoritma pengisihan berkelajuan tinggi Swoole Advanced: Cara menggunakan multi-threading untuk melaksanakan algoritma pengisihan berkelajuan tinggi Jun 14, 2023 pm 09:16 PM

Swoole ialah rangka kerja komunikasi rangkaian berprestasi tinggi berdasarkan bahasa PHP Ia menyokong pelaksanaan berbilang mod IO tak segerak dan berbilang protokol rangkaian lanjutan. Berdasarkan Swoole, kita boleh menggunakan fungsi berbilang benang untuk melaksanakan operasi algoritma yang cekap, seperti algoritma pengisihan berkelajuan tinggi. Algoritma pengisihan berkelajuan tinggi (QuickSort) ialah algoritma pengisihan biasa Dengan mencari elemen penanda aras, elemen tersebut dibahagikan kepada dua urutan yang lebih kecil daripada elemen penanda aras diletakkan di sebelah kiri, dan yang lebih besar daripada atau sama dengan penanda aras elemen diletakkan di sebelah kanan Kemudian susulan kiri dan kanan diletakkan ulangan susulan

Perbincangan mengenai senario aplikasi algoritma pengisihan tatasusunan PHP yang berbeza Perbincangan mengenai senario aplikasi algoritma pengisihan tatasusunan PHP yang berbeza Apr 28, 2024 am 09:39 AM

Untuk senario yang berbeza, adalah penting untuk memilih algoritma pengisihan tatasusunan PHP yang sesuai. Isih buih sesuai untuk tatasusunan berskala kecil tanpa keperluan kestabilan mempunyai kerumitan masa yang paling rendah dalam kebanyakan kes yang mempunyai kestabilan yang tinggi dan sesuai untuk senario yang memerlukan keputusan yang stabil sesuai untuk situasi tanpa keperluan kestabilan ; Isihan timbunan mencari nilai maksimum atau minimum dengan cekap. Melalui perbandingan kes sebenar, isihan pantas adalah lebih baik daripada algoritma lain dari segi kecekapan masa, tetapi isihan gabungan harus dipilih apabila kestabilan perlu dipertimbangkan.

Apakah algoritma pengisihan untuk tatasusunan? Apakah algoritma pengisihan untuk tatasusunan? Jun 02, 2024 pm 10:33 PM

Algoritma pengisihan tatasusunan digunakan untuk menyusun elemen dalam susunan tertentu. Jenis algoritma biasa termasuk: Isih gelembung: menukar kedudukan dengan membandingkan elemen bersebelahan. Isih pilihan: Cari elemen terkecil dan tukarkannya ke kedudukan semasa. Isih sisipan: Sisipkan elemen satu demi satu ke kedudukan yang betul. Isih pantas: kaedah bahagi dan takluk, pilih elemen pangsi untuk membahagi tatasusunan. Isih Gabung: Bahagi dan Takluk, Isih Rekursif dan Gabungan Subarray.

See all articles