ホームページ >バックエンド開発 >PHPチュートリアル >PHPを独学で勉強しているのですが、バブルソートと二分探索がまだ分かりません、諦めたほうがいいでしょうか?

PHPを独学で勉強しているのですが、バブルソートと二分探索がまだ分かりません、諦めたほうがいいでしょうか?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-17 08:32:471122ブラウズ

PHPの独学は、団体に所属せず、ただ本を読んで独学で勉強します。
CSS の div 段階は非常にスムーズに学習でき、PHP も最初の 2 週間で非常にスムーズに学習できましたが、配列に関してはほとんど理解できなくなりました。もう配列。
バブル ソート プログラムを 20 回入力しましたが、どうやって 2 つの for ループを思いついたのかまだわかりません。逐次探索と二分探索は全く学習していない。
この段階を乗り越えるにはどうすればよいですか?
授業がないときは、ほぼ一日中 PHP の学習に取り組み、その日に学んだコードを入力することに集中しましたが、まったく理解できませんでした。
この状況でプロジェクトの段階にうまく入ることができますか?諦めるべきでしょうか?

返信内容:

それは自然に起こるものであり、意図的に理解する必要はありません 練習すれば完璧になる コードを読んだり書いたりするだけではアルゴリズムを理解することはできません。アルゴリズムを理解してからコードを理解する必要があります。

たとえば、バブル ソート配列 $a には n 個の要素があります。
まず、次のことができなければなりません。バブルソートを最初から最後まで理解します。最後に、各ステップでどのような作業が行われたかを理解します
たとえば、それを言葉で表現できます
ステップ 1: $a[0] と $a[1] を比較します。 , if $a[0] > $[1] 次に、2 つの値が交換されます
ステップ 2: $a[1] > $[ 2] その後、2 つの値が交換されます
...
$[n - 1] と $[n] が比較されるまで
この時点で、最大値が計算され、 $a[n] の位置ですが、サイクルは完了しましたが、0 と n - 1 の間の要素はまだ順序が狂っています
次のステップは、0 から n -1 までの最大値を計算し、それを n - 1 の位置に移動します。これは、先頭の各ステップを繰り返すことです

つまり、1 つの (内側の) ループは要素を走査して最大値を計算し、もう 1 つの (外側の) ループは要素を走査して最大値を計算します。ループとは、ステップ全体を再度計算することです。

最後に、プログラミングは実際にはさまざまな困難を伴う仕事です。つまり、高度なスキルが必要な仕事もあれば、非常に難しい仕事もあります。それは結論ではありません。興味がない場合、または生来の IQ 欠陥がある場合は、そのままにしてください。 これはデータ構造の一部です。いくつかのデータ構造に関する書籍を参照してください。

Wikipedia の「バブル ソート」の項目をご覧ください: zh.wikipedia.org/wiki/% 、C言語のプログラムを見て、2つの方法を考えてくださいfor ループ内の 4 つの値はなぜ i = 0; i
Wikipedia ページの下部には他の並べ替えアルゴリズムへのリンクが多数あり、一緒に見ることができます。

jsdo.it/norahiko/oxIy/fここでは、JavaScript で書かれた並べ替えのさまざまなデモを示します。数量を 5 に調整し、速度を 1 に調整して、並べ替えプロセス全体がどのように進行するかをゆっくりと見てみましょう。 demo.sixpoint.me/sortin これは中国語版です。
CSS の div 段階は非常にスムーズに学習でき、PHP も最初の 2 週間で非常にスムーズに学習できましたが、配列に関してはほとんど理解できなくなりました。もう配列。
私は独学に賛成です。現在、さまざまな機関が何を教えているかは誰もが知っています。しかし、「css div ステージ」とは何でしょうか? HTML 4 には合計でいくつのタグがありますか? CSS 2.1 には合計でいくつのルールがありますか? HTML は何のために設計されたのでしょうか? CSS は何のために設計されたのでしょうか? PHP の構文自体は非常に単純で、基本的には C と同じです。配列に関して言えば、次のような構造になっている場合はどうすればよいでしょうか。オブジェクト指向についてはどうでしょうか?
将来のプロジェクトでは、数百のオブジェクトやクラスが存在する可能性があります。バブル ソートさえ理解できなければ、数百のオブジェクト間の複雑な関係を整理するのが困難になる可能性があります。チューリングの本を見つけるのは少し難しいですが、それらを学べばしっかりとした基礎が身に付きます。 初めて C を学んだとき、Tan Haoqiang の本にある Bubble Sort を読みました。何十回も読んだ後、私もまだ実装の概念が理解できず、続けるべきかどうか考えていました。勉強中だけど次に何をすればいいのか分からなかった その日から突然理解できた… - -!
私の提案は、理解できない部分はスキップして、後で学習を続けることです~おそらく後の部分を読んでいくと自然に理解できるようになります~ 私の意見では、最初は lz と同じで、理解できませんでしたが、その後、より多くのプロジェクトに取り組み、より多くのモジュールに触れるようになり、アルゴリズムを振り返ると、突然そう感じるようになります。バブル、再帰、クイック ソート ==== などのアルゴリズムが知らず知らずのうちに使用されていることがわかりました。
ただし、基本的なデータ構造の概念についてはさらに知る必要があります。
さあ! 私の個人的な理解によれば、バブルソートは非常に非効率なソートアルゴリズムです。いわゆる「バブル」とは、シーケンス内の大きいまたは小さい数値の連続的な動きを指します。

さまざまな並べ替えアルゴリズムについては、まずその原理を理解してから、それを視覚化 (漫画を見せるように) すると、学習が容易になります。これらすべての前提は、アルゴリズムに興味があるということです。

以下は Java のバブル アルゴリズムです:

<code class="language-java"><span class="kn">import</span> <span class="nn">java.util.*</span><span class="o">;</span>

<span class="kd">public</span> <span class="kd">class</span> <span class="nc">Sorter</span> <span class="o">{</span>
	
	<span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
		<span class="kt">int</span><span class="o">[]</span> <span class="n">arr</span> <span class="o">=</span> <span class="n">getIntArray</span><span class="o">(</span><span class="mi">10</span><span class="o">,</span> <span class="o">-</span><span class="mi">50</span><span class="o">,</span> <span class="mi">50</span><span class="o">);</span>
		
		<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"Before: "</span><span class="o">);</span>
		<span class="n">printArray</span><span class="o">(</span><span class="n">arr</span><span class="o">);</span>
		<span class="n">bubbleSort</span><span class="o">(</span><span class="n">arr</span><span class="o">);</span>
		<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"After : "</span><span class="o">);</span>
		<span class="n">printArray</span><span class="o">(</span><span class="n">arr</span><span class="o">);</span>
	<span class="o">}</span>
	
	<span class="kd">private</span> <span class="kd">static</span> <span class="kt">int</span><span class="o">[]</span> <span class="nf">getIntArray</span><span class="o">(</span><span class="kt">int</span> <span class="n">capacity</span><span class="o">,</span> <span class="kt">int</span> <span class="n">min</span><span class="o">,</span> <span class="kt">int</span> <span class="n">max</span><span class="o">)</span> <span class="o">{</span>
		<span class="n">Random</span> <span class="n">random</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Random</span><span class="o">();</span>
		<span class="kt">int</span><span class="o">[]</span> <span class="n">arr</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">int</span><span class="o">[</span><span class="n">capacity</span><span class="o">];</span>
		<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">capacity</span><span class="o">;</span> <span class="o">++</span><span class="n">i</span><span class="o">)</span> <span class="o">{</span>
			<span class="n">arr</span><span class="o">[</span><span class="n">i</span><span class="o">]</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="na">nextInt</span><span class="o">(</span><span class="n">max</span> <span class="o">-</span> <span class="n">min</span><span class="o">)</span> <span class="o">+</span> <span class="n">min</span><span class="o">;</span>
		<span class="o">}</span>
		<span class="k">return</span> <span class="n">arr</span><span class="o">;</span>
	<span class="o">}</span>
	
	<span class="kd">private</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">printArray</span><span class="o">(</span><span class="kt">int</span><span class="o">[]</span> <span class="n">arr</span><span class="o">)</span> <span class="o">{</span>
		<span class="n">StringBuilder</span> <span class="n">sb</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StringBuilder</span><span class="o">();</span>
		<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">arr</span><span class="o">.</span><span class="na">length</span><span class="o">;</span> <span class="o">++</span><span class="n">i</span><span class="o">)</span> <span class="o">{</span>
			<span class="n">sb</span><span class="o">.</span><span class="na">append</span><span class="o">(</span><span class="n">arr</span><span class="o">[</span><span class="n">i</span><span class="o">]).</span><span class="na">append</span><span class="o">(</span><span class="s">" "</span><span class="o">);</span>
		<span class="o">}</span>
		<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">sb</span><span class="o">.</span><span class="na">toString</span><span class="o">());</span>
	<span class="o">}</span>
	
	<span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">bubbleSort</span><span class="o">(</span><span class="kt">int</span><span class="o">[]</span> <span class="n">arr</span><span class="o">)</span> <span class="o">{</span>
		<span class="k">if</span> <span class="o">(</span><span class="n">arr</span><span class="o">.</span><span class="na">length</span> <span class="o"><</span> <span class="mi">2</span><span class="o">)</span> <span class="k">return</span><span class="o">;</span>
		<span class="kt">boolean</span> <span class="n">isSorted</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
		<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="n">arr</span><span class="o">.</span><span class="na">length</span> <span class="o">-</span> <span class="mi">1</span><span class="o">;</span> <span class="n">i</span> <span class="o">></span> <span class="mi">0</span> <span class="o">&&</span> <span class="o">!</span><span class="n">isSorted</span><span class="o">;</span> <span class="o">--</span><span class="n">i</span><span class="o">)</span> <span class="o">{</span>
			<span class="n">isSorted</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
			<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">j</span> <span class="o"><</span> <span class="n">i</span><span class="o">;</span> <span class="o">++</span><span class="n">j</span><span class="o">)</span> <span class="o">{</span>
				<span class="k">if</span> <span class="o">(</span><span class="n">arr</span><span class="o">[</span><span class="n">j</span><span class="o">]</span> <span class="o">></span> <span class="n">arr</span><span class="o">[</span><span class="n">j</span><span class="o">+</span><span class="mi">1</span><span class="o">])</span> <span class="o">{</span>
					<span class="n">swap</span><span class="o">(</span><span class="n">arr</span><span class="o">,</span> <span class="n">j</span><span class="o">,</span> <span class="n">j</span><span class="o">+</span><span class="mi">1</span><span class="o">);</span>
					<span class="n">isSorted</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
				<span class="o">}</span>
			<span class="o">}</span>
		<span class="o">}</span>
	<span class="o">}</span>
	
	<span class="kd">private</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">swap</span><span class="o">(</span><span class="kt">int</span><span class="o">[]</span> <span class="n">arr</span><span class="o">,</span> <span class="kt">int</span> <span class="n">indexA</span><span class="o">,</span> <span class="kt">int</span> <span class="n">indexB</span><span class="o">)</span> <span class="o">{</span>
		<span class="kt">int</span> <span class="n">temp</span> <span class="o">=</span> <span class="n">arr</span><span class="o">[</span><span class="n">indexA</span><span class="o">];</span>
		<span class="n">arr</span><span class="o">[</span><span class="n">indexA</span><span class="o">]</span> <span class="o">=</span> <span class="n">arr</span><span class="o">[</span><span class="n">indexB</span><span class="o">];</span>
		<span class="n">arr</span><span class="o">[</span><span class="n">indexB</span><span class="o">]</span> <span class="o">=</span> <span class="n">temp</span><span class="o">;</span>
	<span class="o">}</span>
<span class="o">}</span>
</code>
まずはCを勉強しましょう PHP は主に Web サイト開発に使用されます。現在直面しているのはアルゴリズムの問​​題です。PHP の学習や使用に影響を与えることなく、最初は迂回することができます。 ダンベルで練習するのと同じように、しばらくしてから繰り返すことができます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。