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