首頁 後端開發 php教程 php實作冒泡排序,選擇排序,插入排序與快速排序 快速排序法 快速排序c語言 快速排序演算法c語

php實作冒泡排序,選擇排序,插入排序與快速排序 快速排序法 快速排序c語言 快速排序演算法c語

Jul 29, 2016 am 08:55 AM
快速排序 插入排序

之前自學資料結構的時候看過C語言版的四種基本排序法,C語言都忘的差不多了,最近有空就用php將四種排序法重新寫了一遍,複習一下日益生疏的算法。直接貼上代碼。

<?php
/**
 * 打印数据,用于调试
 * @param var 打印对象
 */
function p($var){
    echo "<pre class="brush:php;toolbar:false">";
    print_r($var);
    echo "
"; } $arr=array(33,11,22,66,55,44,88,99,77); printf("**原数组**"); p($arr); /** *冒泡排序法 * @param $arr 排序数组 *思路:和相邻的数字对比,每次对比如果左边比右边大则交换位置。 *两个节点,一个方向:两次循环次数,冒泡方向(即$j的初值和终止条件) *num的作用是做了优化,一旦循环没有交换则冒泡已完成 **/ function bubbleSort($arr){ print("**冒泡排序法**"); $len=count($arr); $temp=0; $num=1; for ($i=0; ($i < $len-1)&&($num>0); $i++) { $num=0; for ($j=$len-1; $j>$i; $j--) { if($arr[$j]>$arr[$j-1]){ continue; }else{ //冒泡交换 $temp=$arr[$j-1]; $arr[$j-1]=$arr[$j];; $arr[$j]=$temp; $num++; } } } return $arr; } p(bubbleSort($arr)); /** *选择排序法 * @param $arr 排序数组 *思路:每一轮循环,找出最小的数字,把其下标保存到最左方数字 *而找出最小数字的方法是:和右方数字比较,若右方比较小,则保存其下标,再将此下标对应的值和 *下一个右方数字比较直到所有右方数字比较一遍,再将此最小值存放在最左方数字 **/ function selectSort($arr){ print("**选择排序法**"); $len=count($arr); $buff=0; for ($i=0; $i < $len-1; $i++) { $temp=$i; for ($j=$i; $j < $len-1; $j++) { if($arr[$temp]>$arr[$j+1]){ $temp=$j+1;//若右方数字更小,则保存其下标,用来跟后面的数据比较 } } //得到最小的数字下标 if($temp!=$i){ //如果下标不是$i则交换,不然就没必要 $buff=$arr[$temp]; $arr[$temp]=$arr[$i]; $arr[$i]=$buff; } } return $arr; } p(selectSort($arr)); /** *插入排序法 * @param $arr 排序数组 *思路:假设前面的数已经是排好顺序的,现在要把第n个数插到前面的有序数中。即把第二个数据插入到 *第一个数据之中,使其形成一个有序数组,然后再讲第三个数插入到前面两个数组成的有序数组中,形成 *有序数组,如此反复最后完成排序 **/ function insertSort($arr){ print("**插入排序法**"); $len=count($arr); for ($i=1; $i < $len; $i++) { $temp=$arr[$i];//将要插入的数据缓存 for ($j=$i-1; $j >=0; $j--) { if($temp<$arr[$j]){ $arr[$j+1]=$arr[$j];//如果要插入的数据比原数组的最后一个小,则与之交换 $arr[$j]=$temp; }else break; } } return $arr; } p(insertSort($arr)); /** *快速排序法 * @param $arr 排序数组 *思路:选择一个基准元素,通过一趟扫描,将待排序列分成两部分,再对每一部分递归调用自己方法 *最后返回左边排序好的数组和右边排序好的数组和基准元素合并,就是有序数组了。 **/ function quickSort($arr){ $len=count($arr); if($len<=1) return $arr; $baseNum=$arr[0]; $leftArr=$rightArr=array(); //根据基准元素分成两部分 for ($i=1; $i < $len; $i++) { if ($arr[$i]<=$arr[0]) { $leftArr[]=$arr[$i]; }else{ $rightArr[]=$arr[$i]; } } $leftArr=quickSort($leftArr);//递归调用 $rightArr=quickSort($rightArr); return array_merge($leftArr,array($baseNum),$rightArr); } print("**快速排序法**"); p(quickSort($arr)); ?>
登入後複製

運行結果:

快速排序,快速排序算法,快速排序 java,c 快速排序,快速排序时间复杂度,java快速排序算法,快速排序法,快速排序c语言,快速排序算法c语

快速排序,快速排序算法,快速排序 java,c 快速排序,快速排序时间复杂度,java快速排序算法,快速排序法,快速排序c语言,快速排序算法c语

以上就介紹了php實現冒泡排序,選擇排序,插入排序和快速排序,包括了快速排序,插入排序方面的內容,希望對PHP教程有興趣的朋友有所幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1323
25
PHP教程
1272
29
C# 教程
1251
24
Java快速排序技巧及注意事項 Java快速排序技巧及注意事項 Feb 25, 2024 pm 10:24 PM

掌握Java快速排序的關鍵技巧和注意事項快速排序(QuickSort)是一種常用的排序演算法,其核心思想是透過選擇一個基準元素,將待排序序列分割成獨立的兩部分,其中一部分的所有元素均小於基準元素,另一部分的所有元素都大於基準元素,然後對這兩部分分別進行遞歸排序,最終得到有序序列。雖然快速排序在平均情況下的時間複雜度為O(nlogn),但在最壞情況下會退化為O

用Python怎麼實現快速排序 用Python怎麼實現快速排序 Dec 18, 2023 pm 03:37 PM

用Python實現快速排序的方法:1、定義一個名為quick_sort的函數,使用遞歸的方法來實現快速排序;2、檢查數組的長度,如果長度小於等於1,則直接傳回數組,否則,選擇數組中的第一個元素作為樞紐元素(pivot),然後將數組分成比樞紐元素小和比樞紐元素大的兩個子數組;3、將這兩個子數組和樞紐元素連接起來,形成排序好的數組即可。

Java實現的快速排序演算法及其效率評估 Java實現的快速排序演算法及其效率評估 Feb 18, 2024 pm 03:38 PM

快速排序的Java實作及其效能分析快速排序(QuickSort)是一種很常用且高效的排序演算法,它是一種分治法(DivideandConquer)的想法。此演算法透過將一個數組分成兩個子數組,然後將這兩個子數組分別排序,最終將整個數組變成有序序列。在處理大規模資料時,快速排序表現出了非常出色的效能。快速排序的實作採取遞歸的方式,基本想法如下:選擇一個基

遞歸插入排序的C程序 遞歸插入排序的C程序 Sep 20, 2023 pm 02:37 PM

插入排序是一種排序演算法,它是一種基於就地比較的演算法。此演算法的工作原理是將元素放置在已排序子數組中的位置,即元素之前的子數組是排序子數組。演算法Step1-從1到n-1迴圈並執行-Step2.1-選擇位置i處的元素,array[i]。 Step2.2-將元素插入已排序的子數組array[0]中其位置到arr[i]。我們透過一個例子來理解演算法數組=[34,7,12,90,51]對於i=1,arr[1]=7,放入子數組arr[0]-arr[1]中的位置。 [7,34,12,90,51]對於i=2,arr

java如何快速排序函數 java如何快速排序函數 Jan 18, 2024 pm 05:26 PM

快速排序方法:1、建立一個Java範例檔;2、透過quickSort方法實作快速排序演算法;3、選擇數組中的一個元素為主元(pivot),並將陣列分成兩個子數組,一個包含比主元小的元素,另一個包含比主元大的元素,然後對這兩個子數組遞歸地應用快速排序演算法;4、在main方法中對數組進行了排序並輸出結果即可。

C語言中的快速排序是什麼? C語言中的快速排序是什麼? Sep 26, 2023 am 11:00 AM

由於其相對於其他排序演算法的普及性和受歡迎程度,快速排序是一種經常使用的排序演算法。

如何用Python寫插入排序演算法? 如何用Python寫插入排序演算法? Sep 19, 2023 pm 04:07 PM

如何用Python寫插入排序演算法?插入排序是一種簡單直觀的排序演算法,它的想法是將待排序的陣列分成有序部分和無序部分,每次從無序部分中選擇一個元素插入到有序部分的正確位置。插入排序演算法的實作通常透過多次比較和交換元素來實現,時間複雜度為O(n^2)。下面我們就來看看用Python語言如何寫插入排序演算法,以及具體的程式碼範例。 definsertion_so

在PHP中使用陣列函數進行快速排序 在PHP中使用陣列函數進行快速排序 Jun 16, 2023 am 08:54 AM

PHP是一種非常流行的程式語言,它廣泛用於Web開發。在PHP中,陣列是一種非常常見的資料類型,也是一種非常強大的資料結構。正因為如此,PHP提供了許多陣列函數來幫助開發人員處理和操作陣列。其中包括快速排序函數,可以幫助我們快速對陣列進行排序。快速排序是一種常見的排序演算法,它的基本思想是透過比較和交換來將一個數組分成兩個子數組,一個比另一個小,然後遞歸地對每

See all articles