빠른 정렬: 순서가 지정되지 않은 배열 $data에서 비교 값으로 임의의 값을 선택하고, i를 헤드 검색 인덱스로, j를 테일 검색 인덱스로 정의하고, 알고리즘 단계:
(1) 초기화 비교 value $value=$data[0], $i=1, $j=count($data)-1
(2) 먼저 꼬리부터 검색하여 $data[$j]가 작은지 확인합니다. $value보다 작지 않은 경우 $j--보다 작은 좌표
를 찾을 때까지 계속 검색합니다. $value보다 작은
(3) 이때 $data[$i]가 있는지 확인하기 위해 헤드 검색을 시작합니다. $value보다 크거나 $i++보다 크지 않으면 $value보다 큰 좌표
를 찾을 때까지 계속 검색합니다. (4) 이때 $data[$j] 및 $의 값은 data[$i]는 서로 교환됩니다. 즉, $value보다 큰 것을 오른쪽에 배치하고, $value보다 작은 것을 왼쪽에 배치합니다.
(5) 까지 3, 4를 반복합니다. $i==$j
(6) 이때는 이미 $value보다 큰 것을 오른쪽에, $value보다 작은 것을 왼쪽에 넣은 것으로 판단됩니다. 중간 위치는 $i, 중간 값은 $value, $data[$i] 및 $data[0 ] 값은 중간 값이 $value이므로 $value를 중간 좌표로 이동해야 합니다. 배열의
(7) 배열을 왼쪽과 오른쪽에 순서가 없는 두 개의 배열로 나눈 다음 배열 길이가 1이 될 때까지 1~6을 반복적으로 실행합니다
팁: 중국어 빠른 정렬의 정의는 Baidu에서 더 명확해질 것입니다
<?php header("Content-type: text/html; charset=utf-8"); function quickSort($data, $startIndex, $endIndex){ if($startIndex < $endIndex){ $value = $data[$startIndex]; // 对比值 $startT = $startIndex + 1; $endT = $endIndex; while ($startT != $endT) { // 找到比对比值小的坐标 while ($data[$endT] > $value && $endT > $startT){ $endT--; } // 找到比对比值大的左边 while ($data[$startT] < $value && $startT < $endT){ $startT++; } if($endT > $startT){ $temp =$data[$startT]; $data[$startT] = $data[$endT]; $data[$endT] = $temp; } } // 防止数组已经排序好的情况 if($data[$startT] < $value){ $data[$startIndex] = $data[$startT]; $data[$startT] = $value; } $data = quickSort($data, $startIndex, $startT - 1); $data = quickSort($data, $startT + 1, $endIndex); return $data; }else{ return $data; } } $data = array(10, 5, 30, 22, 1, 42, 14, 34, 8, 13, 28, 36, 7); $data = quickSort($data, 0, count($data) - 1); var_dump($data);
위 내용은 빠른 정렬과 PHP 콘텐츠를 포함하여 PHP에서의 빠른 정렬 구현을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.