cari
Rumahpembangunan bahagian belakangtutorial php使用php写出几种常见的排序算法程序

排序算法在编程中经常会遇见,本文将通过php来实现几种常见的排序算法。

一、冒泡排序

冒泡排序理解起来是最简单,但是时间复杂度(O(n^2))也是最大的之一,实现代码如下:

function bubbleSort($arr) {
 $len = count($arr);
 for ($i = 0; $i < $len; $i++) {
  // 遍历i后面的元素,只要该元素小于当前元素,就把较小的往前冒泡
  for ($j = $i + 1; $j < $len; $j++) {
if ($arr[$i] > $arr[$j]) {
 $t = $arr[$i];
 $arr[$i] = $arr[$j];
 $arr[$j] = $t;
}
  }
 }
 return $arr;
}
$arr = [3,1,13,5,7,11,2,4,14,9,15,6,12,10,8];
print_r(bubbleSort($arr));

二、选择排序

选择排序理解起来也比较简单,时间复杂度也是O(n^2),实现代码如下:

function selectSort($arr) {
 $len = count($arr);
 for ($i = 0; $i < $len; $i++) {
  $minIndex = $i;
  // 找出i后面最小的元素与当前元素交换
  for ($j = $i + 1; $j < $len; $j++) {
if ($arr[$j] < $arr[$minIndex]) {
 $minIndex = $j;
}
  }
  if ($minIndex != $i) {
$t = $arr[$i];
$arr[$i] = $arr[$minIndex];
$arr[$minIndex] = $t;
  }
 }
 return $arr;
}
$arr = [3,1,13,5,7,11,2,4,14,9,15,6,12,10,8];
print_r(bubbleSort($arr));

三、插入排序

感觉插入排序跟冒泡排序有点相似,时间复杂度也是O(n^2),实现代码如下:

function insertSort($arr) {
 $len = count($arr);
 for ($i = 1; $i < $len; $i++) {
  if ($arr[$i] < $arr[$i - 1]) {
$t = $arr[$i];
$j = $i - 1;
// 如果当前元素大于前一个元素,就往前挪
while ($j >= 0 && $t < $arr[$j]) {
 $arr[$j + 1] = $arr[$j];
 $j--;
}
$arr[$j + 1] = $t;
  }
 }
 return $arr;
}
$arr = [3,1,13,5,7,11,2,4,14,9,15,6,12,10,8];
print_r(bubbleSort($arr));

四、希尔排序

希尔排序其实可以理解是插入排序的一个优化版,它的效率跟增量有关,增量要取多少,根据不同的数组是不同的,所以希尔排序是一个不稳定的排序算法,它的时间复杂度为O(nlogn)到O(n^2)之间,实现代码如下:   

function shellSort($arr) {
 $len = count($arr);
 $stepSize = floor($len / 2);
 while ($stepSize >= 1) {
  for ($i = $stepSize; $i < $len; $i++) {
if ($arr[$i] < $arr[$i - $stepSize]) {
 $t = $arr[$i];
 $j = $i - $stepSize;
 while ($j >= 0 && $t < $arr[$j]) {
  $arr[$j + $stepSize] = $arr[$j];
  $j -= $stepSize;
 }
 $arr[$j + $stepSize] = $t;
}
  }
  // 缩小步长,再进行插入排序
  $stepSize = floor($stepSize / 2);
 }
 return $arr;
}
$arr = [3,1,13,5,7,11,2,4,14,9,15,6,12,10,8];
print_r(bubbleSort($arr));

五、堆排序

堆排序是一种高效的排序算法,它的时间复杂度是O(nlogn)。原理是:先把数组转为一个最大堆,然后把第一个元素跟第i元素交换,然后把剩下的i-1个元素转为最大堆,然后再把第一个元素与第i-1个元素交换,以此类推。实现代码如下:function heapSort($arr) {

 $len = count($arr);
 // 先建立最大堆
 for ($i = floor(($len - 1) / 2); $i >= 0; $i--) {
  $s = $i;
  $childIndex = $s * 2 + 1;
  while ($childIndex < $len) {
// 在父、左子、右子中 ,找到最大的
if ($childIndex + 1 < $len && $arr[$childIndex] < $arr[$childIndex + 1]) $childIndex++;
if ($arr[$s] < $arr[$childIndex]) {
 $t = $arr[$s];
 $arr[$s] = $arr[$childIndex];
 $arr[$childIndex] = $t;
 $s = $childIndex;
 $childIndex = $childIndex * 2 + 1;
} else {
 break;
}
  }
 }
 // 从最后一个元素开始调整
 for ($i = $len - 1; $i > 0; $i--) {
  $t = $arr[$i];
  $arr[$i] = $arr[0];
  $arr[0] = $t;
  // 调整第一个元素
  $s = 0;
  $childIndex = 1;
  while ($childIndex < $i) {
// 在父、左子、右子中 ,找到最大的
if ($childIndex + 1 < $i && $arr[$childIndex] < $arr[$childIndex + 1]) $childIndex++;
if ($arr[$s] < $arr[$childIndex]) {
 $t = $arr[$s];
 $arr[$s] = $arr[$childIndex];
 $arr[$childIndex] = $t;
 $s = $childIndex;
 $childIndex = $childIndex * 2 + 1;
} else {
 break;
}
  }
 }
 return $arr;
} 
$arr = [3,1,13,5,7,11,2,4,14,9,15,6,12,10,8];
print_r(bubbleSort($arr));

六、快速排序

快排也是一个高效的排序算法,它的时间复杂度也是O(nlogn)。原理是:选择一个基准元素,然后把数组中小于这个元素的元素放在基准元素左边,大于它的,放在基准元素右边。然后对这两边继续同样的操作。代码如下:

function quickSort($arr) {
 $len = count($arr);
 quickSortRecursion($arr, 0, $len - 1);
 return $arr;
}
 
function quickSortRecursion(&$arr, $begin, $end) {
 if ($begin < $end) {
  $left = $begin;
  $right = $end;
  $temp = $arr[$begin];// $temp为基准元素
  // 把小于$temp的元素放到$temp左边,大于它的放在右边
  while ($left < $right) {
while ($left < $right && $arr[$right] >= $temp) $right--;
if ($left < $right) {
 $arr[$left++] = $arr[$right];
}
while ($left < $right && $arr[$left] <= $temp) $left++;
if ($left < $right) {
 $arr[$right--] = $arr[$left];
}
  }
  $arr[$left] = $temp;
  // 把数组分成两部分,递归调用该函数
  quickSortRecursion($arr, $begin, $left - 1);
  quickSortRecursion($arr, $left + 1, $end);
 }
 return $arr;
}
 
$arr = [3,1,13,5,7,11,2,4,14,9,15,6,12,10,8];
print_r(bubbleSort($arr));

七、归并排序

归并排序的时间复杂度也是O(nlogn)。原理是:对于两个排序好的数组,分别遍历这两个数组,获取较小的元素插入新的数组中,那么,这么新的数组也会是排序好的。代码如下:

function mergeSort($arr) {
 $len = count($arr);
 $arr = mergeSortRecursion($arr, 0, $len - 1);
 return $arr;
}
function mergeSortRecursion(&$arr, $begin, $end) {
 if ($begin < $end) {
  $mid = floor(($begin + $end) / 2);
  // 把数组不断拆分,只到只剩下一个元素,对于一个元素的数组,一定是排序好的
  mergeSortRecursion($arr, $begin, $mid);
  mergeSortRecursion($arr, $mid + 1, $end);
  $i = $begin;
  $j = $mid + 1;
  $k = 0;
  $temp = array();
  // 开始执行归并,遍历两个数组,从它们里面取较小的元素插入到新数组中
  while ($i <= $mid && $j <= $end) {
if ($arr[$i] < $arr[$j]) {
 $temp[$k++] = $arr[$i++];
} else {
 $temp[$k++] = $arr[$j++];
}
  }
  while ($i <= $mid) {
$temp[$k++] = $arr[$i++];
  }
  while ($j <= $end) {
$temp[$k++] = $arr[$j++];
  }
  for ($i = 0; $i < $k; $i++) {
$arr[$i + $begin] = $temp[$i];
  }
 }
 return $arr;
}
$arr = [3,1,13,5,7,11,2,4,14,9,15,6,12,10,8];
print_r(bubbleSort($arr));

  本文详解使用php程序实现排序算法,跟多相关内容请关注php中文网。

相关推荐:

PHP如何判断是否为AJAX请求?

php程序报date()警告的处理的解决方法

PHP开发中解决并发问题的几种实现方法案例发现

Atas ialah kandungan terperinci 使用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
PHP dan Python: Paradigma yang berbeza dijelaskanPHP dan Python: Paradigma yang berbeza dijelaskanApr 18, 2025 am 12:26 AM

PHP terutamanya pengaturcaraan prosedur, tetapi juga menyokong pengaturcaraan berorientasikan objek (OOP); Python menyokong pelbagai paradigma, termasuk pengaturcaraan OOP, fungsional dan prosedur. PHP sesuai untuk pembangunan web, dan Python sesuai untuk pelbagai aplikasi seperti analisis data dan pembelajaran mesin.

PHP dan Python: menyelam mendalam ke dalam sejarah merekaPHP dan Python: menyelam mendalam ke dalam sejarah merekaApr 18, 2025 am 12:25 AM

PHP berasal pada tahun 1994 dan dibangunkan oleh Rasmuslerdorf. Ia pada asalnya digunakan untuk mengesan pelawat laman web dan secara beransur-ansur berkembang menjadi bahasa skrip sisi pelayan dan digunakan secara meluas dalam pembangunan web. Python telah dibangunkan oleh Guidovan Rossum pada akhir 1980 -an dan pertama kali dikeluarkan pada tahun 1991. Ia menekankan kebolehbacaan dan kesederhanaan kod, dan sesuai untuk pengkomputeran saintifik, analisis data dan bidang lain.

Memilih antara php dan python: panduanMemilih antara php dan python: panduanApr 18, 2025 am 12:24 AM

PHP sesuai untuk pembangunan web dan prototaip pesat, dan Python sesuai untuk sains data dan pembelajaran mesin. 1.Php digunakan untuk pembangunan web dinamik, dengan sintaks mudah dan sesuai untuk pembangunan pesat. 2. Python mempunyai sintaks ringkas, sesuai untuk pelbagai bidang, dan mempunyai ekosistem perpustakaan yang kuat.

PHP dan Rangka Kerja: Memodenkan bahasaPHP dan Rangka Kerja: Memodenkan bahasaApr 18, 2025 am 12:14 AM

PHP tetap penting dalam proses pemodenan kerana ia menyokong sejumlah besar laman web dan aplikasi dan menyesuaikan diri dengan keperluan pembangunan melalui rangka kerja. 1.Php7 meningkatkan prestasi dan memperkenalkan ciri -ciri baru. 2. Rangka kerja moden seperti Laravel, Symfony dan CodeIgniter memudahkan pembangunan dan meningkatkan kualiti kod. 3. Pengoptimuman prestasi dan amalan terbaik terus meningkatkan kecekapan aplikasi.

Impak PHP: Pembangunan Web dan seterusnyaImpak PHP: Pembangunan Web dan seterusnyaApr 18, 2025 am 12:10 AM

Phphassignificantelympactedwebdevelopmentandextendsbeyondit.1) itpowersmajorplatformslikeworderpressandexcelsindatabaseIntions.2) php'SadaptabilityAldoStoScaleforlargeapplicationFrameworksLikelara.3)

Bagaimanakah jenis membayangkan jenis PHP, termasuk jenis skalar, jenis pulangan, jenis kesatuan, dan jenis yang boleh dibatalkan?Bagaimanakah jenis membayangkan jenis PHP, termasuk jenis skalar, jenis pulangan, jenis kesatuan, dan jenis yang boleh dibatalkan?Apr 17, 2025 am 12:25 AM

Jenis PHP meminta untuk meningkatkan kualiti kod dan kebolehbacaan. 1) Petua Jenis Skalar: Oleh kerana Php7.0, jenis data asas dibenarkan untuk ditentukan dalam parameter fungsi, seperti INT, Float, dan lain -lain. 2) Return Type Prompt: Pastikan konsistensi jenis nilai pulangan fungsi. 3) Jenis Kesatuan Prompt: Oleh kerana Php8.0, pelbagai jenis dibenarkan untuk ditentukan dalam parameter fungsi atau nilai pulangan. 4) Prompt jenis yang boleh dibatalkan: membolehkan untuk memasukkan nilai null dan mengendalikan fungsi yang boleh mengembalikan nilai null.

Bagaimanakah PHP mengendalikan pengklonan objek (kata kunci klon) dan kaedah sihir __clone?Bagaimanakah PHP mengendalikan pengklonan objek (kata kunci klon) dan kaedah sihir __clone?Apr 17, 2025 am 12:24 AM

Dalam PHP, gunakan kata kunci klon untuk membuat salinan objek dan menyesuaikan tingkah laku pengklonan melalui kaedah Magic \ _ _ _. 1. Gunakan kata kunci klon untuk membuat salinan cetek, mengkloning sifat objek tetapi bukan sifat objek. 2. Kaedah klon \ _ \ _ boleh menyalin objek bersarang untuk mengelakkan masalah menyalin cetek. 3. Beri perhatian untuk mengelakkan rujukan pekeliling dan masalah prestasi dalam pengklonan, dan mengoptimumkan operasi pengklonan untuk meningkatkan kecekapan.

PHP vs Python: Gunakan Kes dan AplikasiPHP vs Python: Gunakan Kes dan AplikasiApr 17, 2025 am 12:23 AM

PHP sesuai untuk pembangunan web dan sistem pengurusan kandungan, dan Python sesuai untuk sains data, pembelajaran mesin dan skrip automasi. 1.PHP berfungsi dengan baik dalam membina laman web dan aplikasi yang cepat dan berskala dan biasanya digunakan dalam CMS seperti WordPress. 2. Python telah melakukan yang luar biasa dalam bidang sains data dan pembelajaran mesin, dengan perpustakaan yang kaya seperti numpy dan tensorflow.

See all articles

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

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

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

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.