JavaScipt 数组的一些常用操作,高级语言这些优点就是好,给数组排序一个 sort 就搞定了,在 C 下要自己写算法。真的是大大节省了时间。

var arr = new Array("html", "body", "head", "title", "style", "script", "span", "title");
// 在尾部插入元素
arr.push("ul");
console.log("push", arr);
// 弹出尾部最后一个元素
arr.pop();
console.log("pop", arr);
// 在首部插入一个元素
arr.unshift("dt");
console.log("unshift", arr);
// 弹出首部第一个元素
arr.shift();
console.log("shift", arr);
// 按字典序(ASCII)排序
arr.sort();
console.log("sort", arr);
// 翻转数组
arr.reverse(arr)
console.log("reverse", arr);
// 返回数组指定位置的几个元素
console.log("slice", arr.slice(2, 4));
// 在数组中首次出现的位置
console.log("indexOf", arr.indexOf("title"));
// 在数组中最后一次出现的位置
console.log("lastindexOf", arr.lastIndexOf("title"));

我们已经接触了很多对于数组排序的算法,比如冒泡排序、选择排序、快速排序、插入排序、希尔排序、归并排序等,算法这么多,我们到底该在实际运用中选择哪一个呢?这就涉及到了取舍的问题,当然我们取舍的重点是算法的运行效率。那算法的运行效率到底如何评价呢?有的人说,你写一个测试程序运行一下(事后统计法),看看具体使用了多少时间不就知道了吗?当然这是一种办法,但是它还有很多的缺陷,下面我们就详细介绍一下算法统计的两种方法,一种称为“事后统计法”,另外一种称为“事前分析估算”。继续阅读

(声明:文章全部图片均来自 传智播客 教师课件)归并排序是一种空间换时间的做法,排序的速度当然会提高很多,归并排序中会产生一个临时数组,这个临时数组用来把不断拆分到最后的有序数据进行合并,最后再把合并后的数据重新赋值给原数组,这样就实现了排序。主要分为以下三个步骤:

继续阅读

希尔排序是建立在插入排序的基础之上的,只不过是将数据中做插入排序之前做了一次分组,他的分组是根据用户输入的一个数字来决定分多少组的,比如有如下数据:

继续阅读

插入排序是一个相对复杂一点的排序算法,但是效率要比我们以前接触过的排序算法快一些,他的思想是将数组分为两组数据(第一次分的时候就是数组第一个元素为一组,后面的所有元素为一组),然后从后面一组数据中抽取第一个元素与前面一组数据依次做对比,按需求将大的或者小的值插入到前面的一组数据中,最终后面一组数据全部插入完毕后,前面一组数据就是有序状态了。继续阅读

选择排序的规则是让第 i 个元素分别于后边的元素进行比较,记录最小的元素的位置,遍历完成之后,进行交换。将数组中每一个元素进行处理后最终得出有序的数据。其交换步骤图如下(摘自 传智播客 教师课件):继续阅读

我本想将 STL 中各种容器的实现方法和作用全部写一遍,然后每种容器都发一篇文章,但后来发现这样做的意义不大,在 MSDN 或其他一些帮助文档中,他们比我写的要详细,其实我只需要记住每种容器的常用方法,和在什么场合选择合适的容器。下面这张表是我这里的一些常用方法集合。备用参考。继续阅读