写了三种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);
}

用Python实现快速排序的方法:1、定义一个名为quick_sort的函数,使用递归的方法来实现快速排序;2、检查数组的长度,如果长度小于等于1,则直接返回数组,否则,选择数组中的第一个元素作为枢纽元素(pivot),然后将数组分成比枢纽元素小和比枢纽元素大的两个子数组;3、将这两个子数组和枢纽元素连接起来,形成排序好的数组即可。

快速排序的Java实现及其性能分析快速排序(QuickSort)是一种很常用且高效的排序算法,它是一种分治法(DivideandConquer)的思想。该算法通过将一个数组分成两个子数组,然后对这两个子数组分别进行排序,最终将整个数组变为有序序列。在处理大规模数据时,快速排序表现出了非常出色的性能。快速排序的实现采用递归的方式,基本思路如下:选择一个基

掌握Java快速排序的关键技巧和注意事项快速排序(QuickSort)是一种常用的排序算法,其核心思想是通过选择一个基准元素,将待排序序列分割成独立的两部分,其中一部分的所有元素均小于基准元素,另一部分的所有元素均大于基准元素,然后对这两部分分别进行递归排序,最终得到有序序列。虽然快速排序在平均情况下的时间复杂度为O(nlogn),但在最坏情况下会退化为O

快速排序方法:1、创建一个Java示例文件;2、通过quickSort方法实现快速排序算法;3、选择数组中的一个元素作为主元(pivot),并将数组分为两个子数组,一个包含比主元小的元素,另一个包含比主元大的元素,然后对这两个子数组递归地应用快速排序算法;4、在main方法中对数组进行了排序并输出结果即可。

Java快速排序函数的实现原理与优化快速排序是一种高效的排序算法,它的实现思想是通过分治法将一个大问题分割成多个小问题,通过递归解决子问题,最终获得整体的解。在快速排序中,我们需要选择一个基准元素,将数组分为两部分,一部分小于基准元素,一部分大于基准元素。然后对这两部分再次进行快速排序,直到每个子问题只有一个元素。最后将所有子问题的解合并起来,即可获得数组的

PHP是一种非常流行的编程语言,它广泛用于Web开发。在PHP中,数组是一种非常常见的数据类型,也是一种非常强大的数据结构。正因为如此,PHP提供了许多数组函数来帮助开发人员处理和操作数组。其中包括快速排序函数,可以帮助我们快速对数组进行排序。快速排序是一种常见的排序算法,它的基本思想是通过比较和交换来将一个数组分成两个子数组,一个比另一个小,然后递归地对每

如何使用Java实现快速排序算法快速排序(QuickSort)是一种常用且高效的排序算法。它的基本思想是采用分治法(DivideandConquer)的策略,通过每次选取一个元素作为基准值,将待排序数组划分为两部分,一部分小于基准值,一部分大于基准值,然后分别对两部分进行递归排序,最终实现整个数组的排序。下面我们将详细介绍如何使用Java语言实现快速排

Java快速排序的性能分析及比较快速排序(QuickSort)是一种基于比较的排序算法,因其快速的执行速度和较好的性能表现而广泛应用于实际开发中。本文将对Java中的快速排序算法进行性能分析,并与其他常见的排序算法进行比较。快速排序算法原理快速排序采用分治法的思想,通过将待排序的数据分割成独立的两部分,分别对左右子序列递归地进行排序,从而达到整个序列有序的


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Atom editor mac version download
The most popular open source editor

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

SublimeText3 Linux new version
SublimeText3 Linux latest version

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),
