<?php header("content-type:text/html;charset=utf-8"); $testArr = array(); $time1 = microtime(true); $testArr = range(1, 10); $dataLen = count($testArr); shuffle($testArr); echo '生成并打乱数组花费时间为:'.(microtime(true) - $time1).'<br>'; //1.冒泡排序 $time1 = microtime(true); mpsort($testArr); echo '冒泡排序运行'.$dataLen.'次花费时间为:'.(microtime(true) - $time1).'<br>'; //2.简单排序 $time1 = microtime(true); simpleSort($testArr); echo '简单排序运行'.$dataLen.'次花费时间为:'.(microtime(true) - $time1).'<br>'; //3.插入排序 $time1 = microtime(true); insertSort($testArr); echo '插入排序运行'.$dataLen.'次花费时间为:'.(microtime(true) - $time1).'<br>'; //4.希尔排序 $time1 = microtime(true); $memory1 = memory_get_usage(true); sellSort($testArr); $maxMemory = memory_get_peak_usage(true); echo '希尔排序运行'.$dataLen.'次花费时间为:'.(microtime(true) - $time1).'分配存储空间为:'.(memory_get_usage(true) - $memory1).'峰值为:'.$maxMemory.'<br>'; //5.快速排序 $time1 = microtime(true); $memory1 = memory_get_usage(true); testQuickSort($testArr); $maxMemory = memory_get_peak_usage(true); echo '快速排序运行'.$dataLen.'次花费时间为:'.(microtime(true) - $time1).'分配存储空间为:'.(memory_get_usage(true) - $memory1).'峰值为:'.$maxMemory.'<br>'; //6.快速排序(调用函数) $time1 = microtime(true); $memory1 = memory_get_usage(true); testQuickSort2($testArr); $maxMemory = memory_get_peak_usage(true); echo '快速排序(调用函数)'.$dataLen.'次花费时间为:'.(microtime(true) - $time1).'分配存储空间为:'.(memory_get_usage(true) - $memory1).'峰值为:'.$maxMemory.'<br>'; //内置函数 $time1 = microtime(true); sort($testArr); $maxMemory = memory_get_peak_usage(true); echo '内置函数运行'.$dataLen.'次花费时间为:'.(microtime(true) - $time1).'分配存储空间为:'.(memory_get_usage(true) - $memory1).'峰值为:'.$maxMemory.'<br>'; //冒泡排序 function mpsort($testArr){ echo '冒泡排序:<br>'; echo '排序前:'; iteratorArr($testArr); $dataLen = count($testArr); for($i=0;$i<$dataLen-1;$i++){ for($j=0;$j<$dataLen-1-$i;$j++){ if($testArr[$j] > $testArr[$j+1]){ $maxVal = $testArr[$j]; $testArr[$j] = $testArr[$j+1]; $testArr[$j+1]= $maxVal; } } } echo '排序后:'; iteratorArr($testArr); } //选择排序(简单排序) function simpleSort($testArr){ echo '简单排序:<br>'; echo '排序前:'; iteratorArr($testArr); $dataLen = count($testArr); $index = 0; $minVal = 0; for($i=0;$i<$dataLen;$i++){ $index = $i; for($j=$i;$j<$dataLen;$j++){ if($testArr[$index] > $testArr[$j]) $index = $j; } $minVal = $testArr[$index]; $testArr[$index] = $testArr[$i]; $testArr[$i] = $minVal; } echo '排序后:'; iteratorArr($testArr); } //插入排序 function insertSort($testArr){ echo '插入排序:<br>'; echo '排序前:'; iteratorArr($testArr); $dataLen = count($testArr); $index = 0; $tmp = 0; //print_r($testArr); for($i=1;$i<$dataLen;$i++){ if($testArr[$i-1] < $testArr[$i]) continue; $index = $i; while($index >=1 && $testArr[$index] < $testArr[$index-1]){ soapArr($testArr , $index , $index-1); $index--; } } echo '排序后:'; iteratorArr($testArr); } //希尔排序 function sellSort($testArr){ echo '希尔排序:<br>'; echo '排序前:'; iteratorArr($testArr); $dataLen = count($testArr); $index = 0; $tmp = 0; $increment = intval($dataLen/2); for($k =$increment; $k>=1 ;$k--){ for($i=$k;$i<$dataLen;$i += $k){ if($testArr[$i-$k] < $testArr[$i]) continue; $index = $i; while($index >=1 && $testArr[$index] < $testArr[$index-$k]){ //soapArr($testArr , $index , $index-$k); $tmp = $testArr[$index]; $testArr[$index] = $testArr[$index-$k]; $testArr[$index-$k] = $tmp; $index-=$k; } } } echo '排序后:'; iteratorArr($testArr); } function testQuickSort($testArr){ echo '快速排序:<br>'; echo '排序前:'; iteratorArr($testArr); quickSort($testArr , 0 , count($testArr)); echo '排序后:'; iteratorArr($testArr); } //快速排序 function quickSort(&$testArr , $start , $end){ $index = $start+1; if($index > $end) return $testArr; $tmp = 0; $compareVal = $testArr[$start]; for($i=$index;$i<$end;$i++){ if($testArr[$i] < $compareVal){ //soapArr($testArr , $index , $i); $tmp = $testArr[$index]; $testArr[$index] = $testArr[$i]; $testArr[$i] = $tmp; $index++; } } //soapArr($testArr , $start , $index-1); $tmp = $testArr[$start]; $testArr[$start] = $testArr[$index-1]; $testArr[$index-1] = $tmp; quickSort($testArr , $start , $index-1); quickSort($testArr, $index, $end); } //快速排序 function quickSort2(&$testArr , $start , $end){ $index = $start+1; if($index > $end) return $testArr; $tmp = 0; $compareVal = $testArr[$start]; for($i=$index;$i<$end;$i++){ if($testArr[$i] < $compareVal){ soapArr($testArr , $index , $i); $index++; } } soapArr($testArr , $start , $index-1); quickSort2($testArr , $start , $index-1); quickSort2($testArr, $index, $end); } function testQuickSort2($testArr){ echo '快速排序(调用函数):<br>'; echo '排序前:'; iteratorArr($testArr); quickSort($testArr , 0 , count($testArr)); echo '快速排序(调用函数)'; iteratorArr($testArr); } //交换数组 function soapArr(&$arr , $a , $b){ $tmp = $arr[$a]; $arr[$a] = $arr[$b]; $arr[$b] = $tmp; } //遍历器 function iteratorArr($arr){ foreach($arr as $v){ echo $v."\n\r"; } echo "<br>"; }