摘要:概念這里借用百度百科的一張圖來,非常形象快速排序算法是對冒泡算法的一個(gè)優(yōu)化。獲取已經(jīng)打亂了順序的數(shù)組快速排序這里引用的是我之前寫的冒泡算法排序冒泡運(yùn)行結(jié)果
概念
這里借用百度百科的一張圖來,非常形象:
快速排序算法是對冒泡算法的一個(gè)優(yōu)化。他的思想是先對數(shù)組進(jìn)行分割, 把大的元素?cái)?shù)值放到一個(gè)臨時(shí)數(shù)組里,把小的元素?cái)?shù)值放到另一個(gè)臨時(shí)數(shù)組里(這個(gè)分割的點(diǎn)可以是數(shù)組中的任意一個(gè)元素值,一般用第一個(gè)元素,即$array[0]),然后繼續(xù)把這兩個(gè)臨時(shí)數(shù)組重復(fù)上面拆分,最后把小的數(shù)組元素和大的數(shù)組元素合并起來。這里用到了遞歸的思想。
/* 快速排序 */ function quickSort($array) { if(!isset($array[1])) return $array; $mid = $array[0]; //獲取一個(gè)用于分割的關(guān)鍵字,一般是首個(gè)元素 $leftArray = array(); $rightArray = array(); foreach($array as $v) { if($v > $mid) $rightArray[] = $v; //把比$mid大的數(shù)放到一個(gè)數(shù)組里 if($v < $mid) $leftArray[] = $v; //把比$mid小的數(shù)放到另一個(gè)數(shù)組里 } $leftArray = quickSort($leftArray); //把比較小的數(shù)組再一次進(jìn)行分割 $leftArray[] = $mid; //把分割的元素加到小的數(shù)組后面,不能忘了它哦 $rightArray = quickSort($rightArray); //把比較大的數(shù)組再一次進(jìn)行分割 return array_merge($leftArray,$rightArray); //組合兩個(gè)結(jié)果 }與冒泡算法對比
這里我與之前寫的冒泡算法實(shí)現(xiàn)的排序做了個(gè)對比,可以看出這個(gè)算法比冒泡算法的效率要高很多。
$a = array_rand(range(1,3000), 1500); //甚至在冒泡算法超過1600個(gè)元素的時(shí)候會(huì)出現(xiàn)內(nèi)存不足的提示,但這里為了測出兩個(gè)之間的差別大小, 就設(shè)置成了1500,保證冒泡算法也能執(zhí)行完畢。 shuffle($a); //獲取已經(jīng)打亂了順序的數(shù)組 $t1 = microtime(true); quickSort($a); //快速排序 $t2 = microtime(true); echo (($t2-$t1)*1000)."ms
"; require("./maopao.php"); //這里引用的是我之前寫的冒泡算法排序 $t1 = microtime(true); maoPao($a); //冒泡 $t2 = microtime(true); echo (($t2-$t1)*1000)."ms";
運(yùn)行結(jié)果:
12.10880279541ms 772.64094352722ms
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/20872.html
摘要:介紹三種排序算法快速排序選擇排序冒泡排序選擇排序選擇排序是一種簡單直觀的排序算法。 介紹三種排序算法 快速排序 選擇排序 冒泡排序 選擇排序 選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理是每一次從待排序的數(shù)據(jù)元素中選出最?。ɑ蜃畲螅┑囊粋€(gè)元素,存放在序列的起始位置,直到全部待排序的數(shù)據(jù)元素排完。 選擇排序是不穩(wěn)定的排序方法(比如序列[5, 5, 3...
摘要:算法原理下列動(dòng)圖來自五分鐘學(xué)算法,演示了快速排序算法的原理和步驟。因此,快速排序的遍歷次數(shù)最少是次。為什么最多是次這個(gè)應(yīng)該非常簡單,還是將快速排序看作一棵二叉樹,它的深度最大是。 算法原理 下列動(dòng)圖來自@五分鐘學(xué)算法,演示了快速排序算法的原理和步驟。 showImg(https://shockerli.net/media/15540242976690/quick.gif); 步驟: ...
摘要:概述快速排序最初由東尼霍爾提出,是一種平均時(shí)間復(fù)雜度為,最差時(shí)間復(fù)雜度為的排序算法。測試算法效率與復(fù)雜度完全隨機(jī)序列排序結(jié)果以下面的方法分別生成元素個(gè)數(shù)為萬萬的完全隨機(jī)數(shù)組,并用快速排序算法對其排序。 概述 快速排序(QuickSort)最初由東尼·霍爾提出,是一種平均時(shí)間復(fù)雜度為showImg(https://segmentfault.com/img/bV5sdO?w=61&h=17...
摘要:而在證明算法是正確的基礎(chǔ)上,第二步就是分析算法的時(shí)間復(fù)雜度。算法的時(shí)間復(fù)雜度反映了程序執(zhí)行時(shí)間隨輸入規(guī)模增長而增長的量級,在很大程度上能很好反映出算法的優(yōu)劣與否。 showImg(https://segmentfault.com/img/remote/1460000016451712?w=800&h=341); 前言 雖然工作中,你覺得自己并沒有涉及到算法這方面的東西,但是算法是程序的...
摘要:良好的排序算法具有進(jìn)行最少的比較和交換的特征。冒泡排序是一個(gè)基于比較的排序算法,被認(rèn)為是效率最低的排序算法之一。現(xiàn)在讓我們使用實(shí)現(xiàn)冒泡排序算法。插入排序到目前為止,我們已經(jīng)看到了兩種基于比較的排序算法。 預(yù)警 本文適合對于排序算法不太了解的新手同學(xué)觀看,大佬直接忽略即可。因?yàn)榭紤]到連貫性,所以篇幅較長。老鐵們看完需要大概一個(gè)小時(shí),但是從入門到完全理解可能需要10個(gè)小時(shí)(哈哈哈,以我自己...
閱讀 1914·2021-09-23 11:21
閱讀 1701·2019-08-29 17:27
閱讀 1059·2019-08-29 17:03
閱讀 728·2019-08-29 15:07
閱讀 1922·2019-08-29 11:13
閱讀 2381·2019-08-26 12:14
閱讀 922·2019-08-26 11:52
閱讀 1733·2019-08-23 17:09