>  기사  >  백엔드 개발  >  PHP 소스 코드 26에 대한 간략한 토론: PHP 퀵 정렬 소스 코드 구현 단순화

PHP 소스 코드 26에 대한 간략한 토론: PHP 퀵 정렬 소스 코드 구현 단순화

不言
不言원래의
2018-06-28 18:01:361694검색

이 글에서는 주로 PHP 소스 코드 26: PHP 빠른 정렬 소스 코드 구현에 대해 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유합니다. 🎜🎜#PHP 소스 코드 26에 대한 간략한 이야기: PHP 빠른 정렬 소스 코드 구현의 단순화

이 기간 동안 데이터 구조를 검토하던 중 정렬 및 클래식 퀵 정렬을 보았습니다#🎜🎜 #그래서알았어 PHP에서 정렬을 구현하는 방법을 살펴보세요. Zend 디렉토리에 zend_qsort.c 파일과 zend_qsort.h 파일이 있습니다.

여기서 PHP에서 빠른 정렬을 구현하는 파일이 있습니다.

코드를 보면 알 수 있듯이 여러 데이터 유형과의 호환성을 위해 교환 및 비교 위치가 더 복잡하고 더 얽힌 것 같아서 #🎜🎜에서 모든 유형을 변경했습니다. # PHP 소스 코드의 단순화된 버전을 얻기 위해 int 유형을 사용합니다. 빠른 정렬
코드는 다음과 같습니다.

#include <stdio.h> static qsort_swap(int *a, int *b){
int tmp;
tmp = *a;
*a = *b;
*b = tmp;} void qsort(int *base, int nmemb){
int *begin_stack[10];
int *end_stack[10];
int *begin;
int *end;
int *seg1;
int *seg2;
int *seg2p;
int loop;
unsigned int offset; /* 使用栈而不是常见的递归实现 */
begin_stack[0] = base;//开始元素位置栈,入栈
end_stack[0]   = base + (nmemb - 1) ;//结束位置栈,入栈 for (loop = 0; loop >= 0; --loop) {
begin = begin_stack[loop];//开始位置出栈
end   = end_stack[loop];//结束位置出栈 while (begin < end) {
offset = (end - begin) >> 1;//取中间位置 
qsort_swap(begin, begin + offset);//交换开始和中间的位置 
seg1 = begin;
seg2 = end; while (1) {
for (; seg1 < seg2 && *begin < *seg1 ; seg1 += 1); for (; seg2 >= seg1 && *seg2 > *begin; seg2 -= 1); if (seg1 >= seg2)
break; 
qsort_swap(seg1, seg2);
} 
qsort_swap(begin, seg2); 
seg2p = seg2; if ((seg2p - begin) <= (end - seg2p)) {
if (seg2p < end) {//右侧入栈
begin_stack[loop] = seg2p + 1;
end_stack[loop++] = end;
}
end = seg2p;
} else {
if (seg2p > begin) {// 左侧入栈
begin_stack[loop] = begin;
end_stack[loop++] = seg2p - 1;
}//end if
begin = seg2p;
}//end if
}//end while
}//end for }int main(int argc, char *argv[]){
int a[10] = {14, 5, 7, 8, 2, 4, 55, 3};
int i;
qsort(a, 8);
for (i = 0; i < 8;i++) 
{
printf("%d ", a[i]);
}
return 0;}

이 글을 읽고 나면 다음과 같은 느낌이 듭니다. 강력한 포인터는 엄청나다. 혜택!

위 내용은 모두의 학습에 도움이 되기를 바랍니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!

관련 권장 사항:

PHP 소스 코드 25에 대한 간략한 토론: 다음, 현재, 핵심 기능 정보

# 🎜🎜#

PHP 소스 코드 24에 대한 간략한 토론: 반복자 구현에서 값이 false일 때 반복을 완료할 수 없는 이유 분석
#🎜🎜 #

위 내용은 PHP 소스 코드 26에 대한 간략한 토론: PHP 퀵 정렬 소스 코드 구현 단순화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.