php实现快速排序的三种方法分享_PHP
写了三种php快速排示例,第一种效率低但最简单最容易理解,第二个是算法导论上提供的单向一次遍历找中值方法,第三种是双向遍历找中值经典快排算法。三组算法实现和比较如下:
方法一:该方法比较直观,但损失了大量的空间为代价,使用了效率较低的merge函数。在三种方法中效率最低。最坏情况下算法退化为(O(n*n))
复制代码 代码如下:
function quick_sort($array) {
if(count($array) $key = $array[0];
$rightArray = array();
$leftArray = array();
for($i = 1; $i if($array[$i] >= $key) {
$rightArray[] = $array[$i];
} else {
$leftArray[] = $array[$i];
}
}
$leftArray = quick_sort($leftArray);
$rightArray = quick_sort($rightArray);
return array_merge($leftArray, array($key), $rightArray);
}
方法二:该算法来自算法导论,叫作Nico Lomuto方法(感兴趣goole上有详细说明)使用最经典的单方向一次遍历找到中值。
但这种算法在最坏情况下(例如值相同的数组,需要n-1次划分,每一次划分需要O(n) 时间去掉一个元素)最坏情况下为O(n*n)
复制代码 代码如下:
function quick_sort(&$array, $start, $end) {
if ($start >= $end) return;
$mid = $start;
for ($i = $start + 1; $i if ($array[$i] $mid++;
$tmp = $array[$i];
$array[$i] = $array[$mid];
$array[$mid] = $tmp;
}
}
$tmp = $array[$start];
$array[$start] = $array[$mid];
$array[$mid] = $tmp;
quick_sort($array, $start, $mid - 1);
quick_sort($array, $mid + 1, $end);
}
方法三:该方法基本上是教科书式的常见写法,首先从左向右遍历小于中间元素的跳过,同时从右向左遍历遇到大的元素跳过,然后
如果没有交叉着交换两边值,继续循环,直到找到中间点。注意该方法在处理相同元素的时候,仍旧交换,这样在最坏情况下也有O(nlogn)
效率。但下面的函数中,如果将$array[$right] > $key 改成 $array[$right] >=$key 或将 $array[$left]
情况不但会堕落为O(n*n).而且除了每次比较的消耗外,还会产生n次交互的额外开销。该题还有另外两个考点,针对死记硬背的同学:
1:中间的两个while可否互换。当然不能互换,因为对于快盘需要一个额外的空间保存初始的左值,这样左右互换的时候,先用右边覆盖已经保存
为中值的左值,否则会出现问题。见这句$array[$left] = $array[$right];
2:$array[$right] = $key; 该语句含义可否省略。该句不能省略,大家可以考虑一个极端情况比如两个值的排序(5,2),逐步看下就明白了。
复制代码 代码如下:
function quick_sort_swap(&$array, $start, $end) {
if($end $key = $array[$start];
$left = $start;
$right = $end;
while($left while($left $key)
$right--;
$array[$left] = $array[$right];
while($left $left++;
$array[$right] = $array[$left];
}
$array[$right] = $key;
quick_sort_swap(&$array, $start, $right - 1);
quick_sort_swap(&$array, $right+1, $end);
}

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Cara melaksanakan pengisihan pantas dalam Python: 1. Tentukan fungsi yang dipanggil quick_sort dan gunakan kaedah rekursif untuk melaksanakan pengisihan pantas 2. Semak panjang tatasusunan Jika panjangnya kurang daripada atau sama dengan 1, kembalikan tatasusunan. Jika tidak, pilih tatasusunan Elemen pertama digunakan sebagai elemen pangsi (pivot), dan kemudian tatasusunan dibahagikan kepada dua sub-tatasusunan yang lebih kecil daripada elemen pangsi dan lebih besar daripada elemen pangsi dan elemen pangsi untuk membentuk tatasusunan tersusun.

Kuasai kemahiran dan langkah berjaga-jaga utama Java quick sort (QuickSort) ialah algoritma pengisihan yang biasa digunakan ialah membahagikan urutan untuk diisih kepada dua bahagian bebas dengan memilih elemen penanda aras dan semua elemen dalam satu. bahagian adalah sama. adalah kurang daripada elemen asas, dan semua elemen bahagian lain lebih besar daripada elemen asas, kemudian kedua-dua bahagian disusun secara rekursif, dan akhirnya urutan tertib diperoleh. Walaupun quicksort mempunyai kerumitan masa O(nlogn) dalam kes purata, ia merosot kepada O(nlogn) dalam kes yang paling teruk

Pelaksanaan Java bagi pengisihan pantas dan analisis prestasinya Isih cepat (QuickSort) ialah algoritma pengisihan yang sangat biasa digunakan dan cekap Ia adalah idea divide-and-conquer (DivideandConquer). Algoritma ini membahagikan tatasusunan kepada dua sub-tatasusunan, kemudian mengisih kedua-dua sub-tatasusunan masing-masing, dan akhirnya menukar keseluruhan tatasusunan kepada urutan tertib. Isih pantas menunjukkan prestasi cemerlang semasa memproses data berskala besar. Pengisihan pantas dilaksanakan secara rekursif Idea asas adalah seperti berikut: pilih asas

Prinsip Pelaksanaan dan Pengoptimuman Fungsi Isih Pantas Java Isih pantas ialah algoritma pengisihan yang cekap Idea pelaksanaannya adalah untuk membahagikan masalah besar kepada berbilang masalah kecil melalui kaedah bahagi dan takluk, dan menyelesaikan sub-masalah secara rekursif untuk akhirnya memperoleh penyelesaian keseluruhan. . Dalam isihan pantas, kita perlu memilih elemen penanda aras dan membahagikan tatasusunan kepada dua bahagian, satu bahagian lebih kecil daripada elemen penanda aras dan satu lagi lebih besar daripada elemen penanda aras. Kedua-dua bahagian itu kemudian diisih dengan pantas sekali lagi sehingga terdapat hanya satu elemen bagi setiap submasalah. Akhirnya, penyelesaian kepada semua sub-masalah digabungkan untuk mendapatkan tatasusunan

Kaedah isihan pantas: 1. Cipta fail sampel Java 2. Laksanakan algoritma isihan pantas melalui kaedah quicksort 3. Pilih elemen dalam tatasusunan sebagai pangsi (pivot), dan bahagikan tatasusunan kepada dua sub-tatasusunan, satu; mengandungi pangsi Elemen dengan elemen yang lebih kecil ialah elemen yang lebih kecil, dan satu lagi mengandungi elemen yang lebih besar daripada elemen pangsi, dan kemudian algoritma isihan pantas digunakan secara rekursif pada dua sub-tatasusunan; kaedah utama dan keluarkan hasilnya.

PHP adalah bahasa pengaturcaraan yang sangat popular dan ia digunakan secara meluas untuk pembangunan web. Dalam PHP, tatasusunan ialah jenis data yang sangat biasa dan struktur data yang sangat berkuasa. Oleh sebab itu, PHP menyediakan banyak fungsi tatasusunan untuk membantu pembangun mengendalikan dan memanipulasi tatasusunan. Ini termasuk fungsi isihan pantas, yang membantu kami mengisih tatasusunan dengan cepat. Isih pantas ialah algoritma pengisihan biasa Idea asasnya ialah membahagikan tatasusunan kepada dua sub-tatasusunan, satu lebih kecil daripada yang lain, melalui perbandingan dan pertukaran, dan kemudian secara rekursif.

Cara melaksanakan algoritma isihan pantas dalam Java Isihan pantas (QuickSort) ialah algoritma isihan yang biasa digunakan dan cekap. Idea asasnya ialah menggunakan strategi bahagi dan takluk (Divide and Conquer) Dengan memilih satu elemen pada satu masa sebagai nilai tanda aras, tatasusunan yang hendak diisih dibahagikan kepada dua bahagian, satu bahagian lebih kecil daripada nilai tanda aras, dan bahagian lain adalah lebih besar daripada nilai penanda aras, dan kemudian kedua-dua bahagian diproses secara berasingan, dan akhirnya mencapai pengisihan keseluruhan tatasusunan. Di bawah ini kami akan memperkenalkan secara terperinci cara menggunakan bahasa Java untuk mencapai pengisihan pantas

Analisis Prestasi dan Perbandingan Java Quick Sort Quick Sort (QuickSort) ialah algoritma pengisihan berasaskan perbandingan yang digunakan secara meluas dalam pembangunan sebenar kerana kelajuan pelaksanaannya yang pantas dan prestasi yang baik. Artikel ini akan melakukan analisis prestasi algoritma isihan pantas dalam Java dan membandingkannya dengan algoritma isihan biasa yang lain. Prinsip Algoritma Isih Pantas Isih pantas menggunakan idea kaedah bahagi dan takluk Dengan membahagikan data untuk diisih kepada dua bahagian bebas, urutan kiri dan kanan diisih secara rekursif, untuk mencapai keteraturan keseluruhan urutan.
