有关排序算法

by pxz


发布于: 2011-03-21 所属分类: php 后端 c c++ 算法 标签: 排序  136


<h3 id="h3-1-php-"><a name="1. php 冒泡排序算法实现" class="reference-link"></a><span class="header-link octicon octicon-link"></span>1. php 冒泡排序算法实现</h3><pre><code># php 冒泡排序算法 $arr = array(1, 5, 6, 2, 3, 9, 15); $len = count($arr); for($i=0; $i<$len-1; $i++) { for($j=$len-1; $j>$i; $j--) { //如果是从小到大排序,这里改成 $arr[$j] < $arr[$j-1] if ($arr[$j] > $arr[$j-1]) { $t = $arr[$j]; $arr[$j] = $arr[$j-1]; $arr[$j-1] = $t; } } } print_r($arr); /* 算法思路: 第一轮把最大的排到第一位, 第二轮把第二大的排到第二位... 外层for循环表示总共需要进行$len-1轮冒泡, 内层for循环是每一轮的冒泡过程 */ /* 运行结果: Array ( [0] => 15 [1] => 9 [2] => 6 [3] => 5 [4] => 3 [5] => 2 [6] => 1 ) */ </code></pre><h3 id="h3-2-c-"><a name="2. c++ 快速排序算法实现" class="reference-link"></a><span class="header-link octicon octicon-link"></span>2. c++ 快速排序算法实现</h3><pre><code>#include<iostream> using namespace std; //c++ 快速排序 void Qsort(int a[],int low,int high) { if(low>=high) { return; } int first=low; int last=high; int key=a[first];/*用字表的第一个记录作为枢轴*/ while(first<last) { while(first<last&amp;&amp;a[last]>=key) --last; a[first]=a[last];/*将比第一个小的移到低端*/ while(first<last&amp;&amp;a[first]<=key) ++first; a[last]=a[first];/*将比第一个大的移到高端*/ } a[first]=key;/*枢轴记录到位*/ Qsort(a, low, first-1); Qsort(a, first+1, high); } int main() { int a[]={57,68,59,52,72,28,96,33,24}; Qsort(a, 0, sizeof(a)/sizeof(a[0])-1);/*这里原文第三个参数要减1否则内存泄露*/ for(int i=0;i<sizeof(a)/sizeof(a[0]);i++) { printf("a[%d] = %d \n", i, a[i]); } return(0); } /* 程序输出结果: a[0] = 24 a[1] = 28 a[2] = 33 a[3] = 52 a[4] = 57 a[5] = 59 a[6] = 68 a[7] = 72 a[8] = 96 */ </code></pre><p>linux下执行把上述代码保存为 qsort.cpp, 然后执行</p> <pre><code>$ g++ -o qsort ./qsort.cpp $ ./qsort </code></pre><p>可查看执行结果</p> <h3 id="h3-3-php-"><a name="3. php 快速排序算法实现" class="reference-link"></a><span class="header-link octicon octicon-link"></span>3. php 快速排序算法实现</h3><pre><code>// 快速排序 function Qsort($arr){ $len = count($arr); if($len <= 1){ return $arr; } $key = $arr[0]; $left_arr = array(); $right_arr = array(); for($i=1; $i<$len;$i++){ if($arr[$i] <= $key){ $left_arr[] = $arr[$i]; }else{ $right_arr[] = $arr[$i]; } } $left_arr = Qsort($left_arr); $right_arr = Qsort($right_arr); return array_merge($left_arr, array($key), $right_arr); } $arr = array(66,90,23,96,54,8,9,102,20); print_r(Qsort($arr)); /* 运行结果 Array ( [0] => 8 [1] => 9 [2] => 20 [3] => 23 [4] => 54 [5] => 66 [6] => 90 [7] => 96 [8] => 102 ) */ </code></pre>

发表评论

暂无评论

搜索
用户登陆