自學php,沒有參加任何機構,自己看書學習。
css div階段都很通順的學會了,正式學php 前兩周也很通順,文法,函數,很快就掌握了,但是到了數組就開始卡殼,數組以後幾乎都聽不懂了。
泡沫排序我敲了20次程式,還是不知道那兩個for迴圈是怎麼想出來的。順序尋找和二元尋找也完全沒有學會。
這個階段怎麼度過?
我的努力程度幾乎全天都在學習php,沒有課的時候心無旁騖的敲當天學的代碼,但就是敲不明白。
我這個情況能順利進入項目階段嗎?該放棄嗎?
回複內容:
自然而然就會了,不用刻意理解熟能生巧不能從看或者寫代碼來理解演算法,要理解演算法然後再理解代碼
比如冒泡排序數組 $a,有 n 個元素
首先你要能夠理解一個冒泡排序,從頭到尾,每一步都做了什麼工作
比如你能夠用文字表達出來
第一步:將 $a[0] 和 $a[1] 進行比較,如果 $a[0] > $[1] 則兩個值互換
第二步:將 $a[1] 和 $a[2] 進行比較,如果 $a[1] > $[2] 則兩個值互換
...
直到 $[n - 1] 和 $[n] 比較完畢
這時候已經計算出最大值,並把它放在了 $a[n] 的位置上,但已經完成了一個迴圈,而 0 到 n - 1 之間的元素還是亂序的
那接下來就是要從 0 到 n -1 之間算出最大值,並把它移動到 n - 1 的位置上,就是要重複最上面的每一步
也就是說一個(內層)迴圈是為了遍曆元素算出最大值,另一個(外層)迴圈是為了將整個步驟再計算一次
最後,編程其實是一種難度跨度比較大的工作,也就是有的工作可能需要技術很強,但是有的工作也有可能難度低到沒底線,所以如果不是沒興趣了,或者先天智商缺陷,堅持就好了。這屬於資料結構的部分,可以找些資料結構的書來看。
可以看看維基百科上的“冒泡排序”條目: http://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F
,看一下C語言的那個程式,想一想兩個for迴圈的4個數值是怎麼得來的,為什麼是i = 0; i < size - 1;和j = 0; j < size - i - 1;。還有flag變數是幹嘛用的。
維基百科頁面下方還有很多其他排序演算法的連結,可以一起看一看。
http://jsdo.it/norahiko/oxIy/fullscreen
這裡有用JavaScript寫的各種排序的示範,把數量調到5,把速度調到1,慢慢地看一下整個排序過程是怎麼進行的。 http://demo.sixpoint.me/sorting/
這裡是漢化版。
css div階段都很通順的學會了,正式學php 前兩周也很通順,文法,函數,很快就掌握了,但是到了數組就開始卡殼,數組以後幾乎都聽不懂了。
自學很贊成,現在的各種機構教出來的是什麼樣子大家都清楚。不過,什麼叫“css div階段”?HTML 4總共有多少標籤?CSS 2.1總共有多少條規則?HTML是為了什麼而設計出來的?CSS是為了什麼而設計出來的?PHP文法本身很簡單,和C基本一樣。到數組就卡殼了,後面的一些結構怎麼辦?物件導向怎麼辦?
以後做項目,可能有幾百個對象和類,如果連個冒泡排序都理解不了,恐怕很難理清幾百個對象之間的複雜關係。找一些圖靈的書,雖然難一點,但是學出來後基礎會比較紮實。我當初學C的時候看譚浩強書上的那個冒泡排序,看了幾十遍都沒看明白實現的思路-,也是像lz這樣懷疑的自己,想著要不要學下去,後面我都不知道從哪一天開始,突然就理解了..- -!
我的建議是,看不懂的就暫時跳過,繼續往後面學~可能看後面某個部分就自然明白了~個人愚見,剛開始的時候,我跟lz一樣的,怎麼都想不通.後來做的項目多了,接觸的模組多了.再回頭看演算法,你就會如同猛然大悟一樣的.原來你不知不覺已經運用了冒泡,遞迴,快速排序====之類的演算法.
但是,基礎的資料結構概念你還是要多瞭解些的.
加油!冒泡排序是一種效率很低的排序演算法,所謂的“泡”按我個人的理解就是數列中較大或較小的數,這個較大或較小的數不斷的移動就是“冒”。
各種排序演算法,先弄清楚其原理,之後將其形象化(像放動畫片一樣),這樣學起來就比較輕鬆了。這一切的前提是,你對演算法有興趣。
下面是 Java 的冒泡演算法:
import java.util.*;public class Sorter {public static void main(String[] args) {int[] arr = getIntArray(10, -50, 50);System.out.print("Before: ");printArray(arr);bubbleSort(arr);System.out.print("After : ");printArray(arr);}private static int[] getIntArray(int capacity, int min, int max) {Random random = new Random();int[] arr = new int[capacity];for (int i = 0; i < capacity; ++i) {arr[i] = random.nextInt(max - min) + min;}return arr;}private static void printArray(int[] arr) {StringBuilder sb = new StringBuilder();for (int i = 0; i < arr.length; ++i) {sb.append(arr[i]).append(" ");}System.out.println(sb.toString());}public static void bubbleSort(int[] arr) {if (arr.length < 2) return;boolean isSorted = false;for (int i = arr.length - 1; i > 0 && !isSorted; --i) {isSorted = true;for (int j = 0; j < i; ++j) {if (arr[j] > arr[j+1]) {swap(arr, j, j+1);isSorted = false;}}}}private static void swap(int[] arr, int indexA, int indexB) {int temp = arr[indexA];arr[indexA] = arr[indexB];arr[indexB] = temp;}}
還是先學習c 吧PHP多用於網站開發,你現在碰到的是演算法問題,可以先繞道而行,不影響你對PHP的學習和使用可以過一段時間再重複學習,跟練習啞鈴差不多。