ホームページ > バックエンド開発 > PHPチュートリアル > PHP ソース コードの簡単な説明 26: PHP クイック ソート ソース コードの実装の簡略化

PHP ソース コードの簡単な説明 26: PHP クイック ソート ソース コードの実装の簡略化

不言
リリース: 2023-04-02 06:20:02
オリジナル
1714 人が閲覧しました

この記事では、主に PHP ソース コードの簡略化 26: PHP クイック ソート ソース コードの実装を紹介します。これは、必要な友人に参照していただくために共有します。 # PHP ソース コード 26 についての簡単な説明: PHP クイック ソート ソース コードの実装の簡素化

この期間中、データ構造を見直していたところ、ソートと従来のクイック ソートが目に留まりました。 PHP でのソートの実装を見てみることにしました。 Zend ディレクトリには、zend_qsort.c ファイルと zend_qsort.h ファイルがあります。

ここに、PHP でクイック ソートを実装するためのファイルがあります。

私たちはコードを見ると様々なデータ型に対応していることが分かりますので、交換位置や比較位置がより複雑になり、より複雑になりそうなので、
内の型をすべてint型に変更しました。 PHP ソース コードにクイック ソートの簡易バージョンが含まれています
コードは次のとおりです:

#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 中国語 Web サイトをご覧ください。

関連する推奨事項:

PHP ソース コード 25 についての簡単な説明: 次の現在の主要な関数について


簡単な説明 PHP ソース コード 24: イテレーターの実装で値が false の場合に反復を完了できない理由の分析

#

以上がPHP ソース コードの簡単な説明 26: PHP クイック ソート ソース コードの実装の簡略化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート