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的学习和使用
可以过一段时间再重复学习,跟练习哑铃差不多。相关文章推荐
• 浅析PHP应用程序中正确调用系统命令的方法• 求解:phpcms模板怎样转码?该怎么解决• 想请问一下印证的有关问题• php 之 cookie 跟 session 简单解读(笔记) • xml转换成数组的有关问题独孤九贱(3)_JavaScript视频教程
javascript是运行在浏览器上的脚本语言,连续多年,被评为全球最受欢迎的编程语言。是前端开发必备三大法器中,最具杀伤力。如果前端开发是降龙十八掌,好么javascript就是第18掌:亢龙有悔。没有它,你的前端生涯是不完整的。《php.cn独孤九贱(3)-JavaScript视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了javascript知识。
JavaScript教程139876次播放
独孤九贱(6)_jQuery视频教程
jQuery是一个快速、简洁的JavaScript框架。设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。 核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等,是全球最流行的前端开发框架之一。PHP中文网根据最新版本,独家录制jQuery最新视频教程,回馈PHP中文网的新老用户。
jQuery教程114945次播放
jQuery与Ajax基础与实战
jQuery是最流行的JS函数库,封装了许多实用的功能,其中最引人入胜的就是Ajax。 jQuery中的Ajax操作,语法简单,操作方便,使Ajax从未如此轻松,前端人员从此不再为与服务器异步交互而发愁,本套课程,精选了最常用的几个方法,从基本的语法到每个参数,再到具体实例进行了全面的讲解。
AJAX教程14613次播放
Git教程(60分钟全程无废话版)
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持
JavaScript教程12610次播放