/******
1) 버블 정렬: 가장 가벼운 버블이 위쪽에 있는 것처럼 가장 작은 값이 왼쪽에 오도록 쌍으로 값을 교환합니다.
2) 전체 숫자 열을 한 번 교환하며, 매번 가장 작은 숫자를 나머지 숫자 중에서 얻을 수 있으며, "팝업된" 숫자는 순서화된 간격을 형성하며, 나머지 숫자는 다음과 같습니다. 아래의 값은 순서가 없는 구간을 형성하며, 순서가 있는 구간의 각 요소의 값은 순서가 없는 구간의 값보다 작습니다.
3) 빠른 정렬: 기본 번호, 왼쪽 및 오른쪽 배열, 재귀 호출, 병합.
4)삽입 정렬: 정렬 간격은 두 부분으로 나누어 왼쪽은 정렬되고 오른쪽은 정렬되지 않습니다. 오른쪽 간격에서 첫 번째 요소를 가져와 왼쪽 간격에 삽입합니다. 이 요소가 왼쪽 간격의 가장 오른쪽 요소보다 작은 경우 요소가 왼쪽 간격의 가장 오른쪽 요소보다 크면 가장 오른쪽 요소의 원래 위치에 삽입됩니다. 한 위치만큼 오른쪽으로 이동하면 계산기가 1만큼 줄어들고 이전 요소와 다시 비교됩니다. 이전 요소가 삽입할 요소보다 작아질 때까지 위 단계를 반복합니다.
6) 간격 끝점 값 처리에 주의하세요. 배열의 첫 번째 요소의 첨자는 0입니다.
***/
<span><br>$a</span>=<span>array</span>('3','8','1','4','11','7'<span>); </span><span>print_r</span>(<span>$a</span><span>); </span><span>$len</span> = <span>count</span>(<span>$a</span><span>); </span><span>//</span><span>从小到大</span><span>for</span>(<span>$i</span>=1;<span>$i</span><<span>$len</span>;<span>$i</span>++<span>) { </span><span>for</span>(<span>$j</span>=<span>$len</span>-1;<span>$j</span>>=<span>$i</span>;<span>$j</span>--<span>) </span><span>if</span>(<span>$a</span>[<span>$j</span>]<<span>$a</span>[<span>$j</span>-1<span>]) {</span><span>//</span><span>如果是从大到小的话,只要在这里的判断改成if($b[$j]>$b[$j-1])就可以了<span>$x</span>=<span>$a</span>[<span>$j</span><span>]; </span><span>$a</span>[<span>$j</span>]=<span>$a</span>[<span>$j</span>-1<span>]; </span><span>$a</span>[<span>$j</span>-1]=<span>$x</span><span>; } } </span><span>print_r</span>(<span>$a</span><span>); </span><span>//</span><span>另一种方法 从小到大</span><span>$b</span>=<span>array</span>('4','3','8','9','2','1'<span>); </span><span>$len</span>=<span>count</span>(<span>$b</span><span>); </span><span>for</span>(<span>$k</span>=1;<span>$k</span><<span>$len</span>;<span>$k</span>++<span>) { </span><span>for</span>(<span>$j</span>=<span>$len</span>-1,<span>$i</span>=0;<span>$i</span><<span>$len</span>-<span>$k</span>;<span>$i</span>++,<span>$j</span>--<span>) </span><span>if</span>(<span>$b</span>[<span>$j</span>]<<span>$b</span>[<span>$j</span>-1<span>]){ </span><span>//</span><span>如果是从大到小的话,只要在这里的判断改成if($b[$j]>$b[$j-1])就可以了<span>$tmp</span>=<span>$b</span>[<span>$j</span><span>]; </span><span>$b</span>[<span>$j</span>]=<span>$b</span>[<span>$j</span>-1<span>]; </span><span>$b</span>[<span>$j</span>-1]=<span>$tmp</span><span>; } </span><span>print_r</span>(<span>$b</span><span>); </span><span>echo</span> " "<span>; } </span><span>//</span><span>下面的这个执行效率更高</span><span>function</span> maopao(<span>$arr</span><span>) { </span><span>$len</span> = <span>count</span>(<span>$arr</span><span>); </span><span>for</span>(<span>$i</span>=1; <span>$i</span><<span>$len</span>; <span>$i</span>++)<span>//</span><span>最多做n-1趟排序</span><span> { </span><span>$flag</span> = <span>false</span>; <span>//</span><span>本趟排序开始前,交换标志应为假</span><span>for</span>(<span>$j</span>=<span>$len</span>-1;<span>$j</span>>=<span>$i</span>;<span>$j</span>--<span>) { </span><span>if</span>(<span>$arr</span>[<span>$j</span>]<<span>$arr</span>[<span>$j</span>-1])<span>//</span><span>交换记录</span> {<span>//</span><span>如果是从大到小的话,只要在这里的判断改成if($arr[$j]>$arr[$j-1])就可以了<span>$x</span>=<span>$arr</span>[<span>$j</span><span>]; </span><span>$arr</span>[<span>$j</span>]=<span>$arr</span>[<span>$j</span>-1<span>]; </span><span>$arr</span>[<span>$j</span>-1]=<span>$x</span><span>; </span><span>$flag</span> = <span>true</span>;<span>//</span><span>发生了交换,故将交换标志置为真</span><span> } } </span><span>if</span>(! <span>$flag</span>)<span>//</span><span>本趟排序未发生交换,提前终止算法</span><span>return</span><span>$arr</span><span>; } } </span><span>$shuz</span> = <span>array</span>('2','4','1','8','5'<span>); </span><span>$bb</span> = maopao(<span>$shuz</span><span>); </span><span>print_r</span>(<span>$bb</span><span>); </span><span>//</span><span> 快速排序</span><span>function</span> kuaisu(<span>$arr</span><span>){ </span><span>$len</span> = <span>count</span>(<span>$arr</span><span>); </span><span>if</span>(<span>$len</span> <= 1<span>){ </span><span>return</span><span>$arr</span><span>; } </span><span>$key</span> = <span>$arr</span>[0<span>]; </span><span>$left_arr</span> = <span>array</span><span>(); </span><span>$right_arr</span> = <span>array</span><span>(); </span><span>for</span>(<span>$i</span>=1; <span>$i</span><<span>$len</span>;<span>$i</span>++<span>){ </span><span>if</span>(<span>$arr</span>[<span>$i</span>] <= <span>$key</span><span>){ </span><span>$left_arr</span>[] = <span>$arr</span>[<span>$i</span><span>]; }</span><span>else</span><span>{ </span><span>$right_arr</span>[] = <span>$arr</span>[<span>$i</span><span>]; } } </span><span>$left_arr</span> = kuaisu(<span>$left_arr</span><span>); </span><span>$right_arr</span> = kuaisu(<span>$right_arr</span><span>); </span><span>return</span><span>array_merge</span>(<span>$left_arr</span>, <span>array</span>(<span>$key</span>), <span>$right_arr</span><span>); } </span><span>$arr</span> = <span>array</span>(23,98,54,2,9,62,34<span>); </span><span>print_r</span>(kuaisu(<span>$arr</span>));
위 내용은 삽입정렬을 포함한 PHP 버블정렬과 퀵정렬에 대해 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.