Javascript经典算法学习1:产生随机数组的辅助类

辅助类

在几个经典排序算法学习部分,为方便统一测试不同算法,新建了一个辅助类,主要功能为:产生指定长度的随机数组,提供打印输出数组,交换两个元素等功能,代码如下:

function ArraySortUtility(numOfElements) {
    this.dataArr = [];
    this.pos = 0;
    this.numOfElements = numOfElements;
    this.insert = insert;
    this.toString = toString;
    this.clear = clear;
    this.setData = setData;
    this.swap = swap;
    for (var i = 0; i < numOfElements.length; i++) {
        this.dataArr[i] = i;
    }
}

ArraySortUtility.prototype={
    constructor:ArraySortUtility,
    bubbleSort: bubbleSort,
    //下面添加新的方法
}

几个重要方法的实现如下:

function setData() {
    for (var i = 0; i < this.numOfElements; i++) {
        this.dataArr[i] = Math.floor(Math.random() * (this.numOfElements + 1));
    }
}

其它几个函数实现如下:

function clear() {
    for (var i = 0; i < this.dataArr.length; i++) {
        this.dataArr[i] = 0;
    }
}

function insert(element) {
    this.dataArr[this.pos++] = element;
}

function toString() {
    var restr = "";
    for (var i = 0; i < this.dataArr.length; i++) {
        restr += this.dataArr[i] + " ";
        if (i > 0 & i % 10 == 0) {
            restr += "\n";
        }
    }
    return restr;
}

function swap(arr, index1, index2) {
    var temp = arr[index1];
    arr[index1] = arr[index2];
    arr[index2] = temp;
}
时间: 2024-08-04 15:22:40

Javascript经典算法学习1:产生随机数组的辅助类的相关文章

经典算法学习——快速找出数组中两个数字,相加等于某特定值

这个算法题的描述如下:快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值.目前我假设数组中的都是各不相等的整数.这道题是我在一次面试中被问到的,由于各种原因,我没回答上来,十分尴尬.其实这道题十分简单,我们使用相对巧妙的方法来实现下.注意不使用两层循环的元素遍历.示例代码上传至:https://github.com/chenyufeng1991/SumTo100 . 算法描述如下: (0)首先对原数组进行排序,成为递增数组: (1)对排序后的数组头部i [0]和数组尾部j [n-1]

经典算法学习——链表实现冒泡排序

我在之前一篇博客<经典算法学习--冒泡排序>中简单实现了使用数组进行冒泡排序.这篇博客我们将来实现使用链表如何排序,其实整体的思路是一样的.示例代码上传至: https://github.com/chenyufeng1991/BubbleSortLinkedList . 算法描述如下: (1)比较相邻的前后两个数据,如果前面数据大于后面的数据,就将两个数据交换: (2)这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就到了最后一个位置,也就是下标为N-1的位置(沉到了水底).

【白话经典算法系列之十七】 数组中只出现一次的数 其他三次

本文地址:http://blog.csdn.net/morewindows/article/details/12684497转载请标明出处,谢谢. 欢迎关注微博:http://weibo.com/MoreWindows 首先看看题目要求: 数组A中,除了某一个数字x之外,其他数字都出现了三次,而x出现了一次.请给出最快的方法找到x. 这个题目非常有意思,在本人博客中有<位操作基础篇之位操作全面总结>这篇文章介绍了使用位操作的异或来解决——数组中其他数字出现二次,而x出现一次,找出x.有<

经典算法学习——非循环双向链表实现冒泡排序(不带头结点)

我在前面两篇博客<经典算法学习--单链表(不带头结点)实现冒泡排序><经典算法学习--单链表实现冒泡排序(带头结点)>中详细描述了分别使用带头结点和不带头结点的单链表实现了冒泡排序,让我们对单链表和冒泡排序有了理性的认识.今天我们将会来使用不带头结点的非循环双向链表来实现冒泡排序,在处理过程中,这种冒泡比前面两种更为简单高效.代码上传至 https://github.com/chenyufeng1991/DoubleLinkedList_BubbleSort . 核心代码如下: /

我的算法学习(一)----数组的全排列

看见别人写出来美丽有用的代码,最终下定决心好好学习算法,在这里记录下自己学习的成果. 前两天看到数组的全排列,于是自己照着别人的想法实现了一下,感觉自己理解了,有点小高兴,记载一下. /* * 数组的全排列*/ public class myAllSort { public static void sort(int[] number,int start,int end){ int temp; // 假设发现数组对掉元素到了最后一个,那么就输出,证明已经符合要求 if(start==end) {

java学习日记-基础-随机数组的求余运算

时间是2017年5月6日,青年节刚过,坐标上海,沪漂2个月. 就这样简短地开始吧.                                by:slowcity [案例分析1] 要求定义一个int 型数组a,包含100 个元素,保存100个随机的4 位数.再定义一个int 型数组b,包含10 个元素.统计a 数组中的元素对10 求余等于0 的个数,保存到 b[0]中:对10 求余等于1 的个数,保存到b[1]中,--依此类推 一般看到这类的最基本的思路:1先建立一个含数组存随机四位数 2

经典算法学习——第一个只出现一次的字符

这同样是剑指Offer中的很经典的一道面试题.题目描述为:在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",则输出'b'.  一开始大家就会想到最简单的方法就是每访问到一个字符的时候,与后面的每一个字符去进行比较,若没有发现相同的元素,那么该元素就是第一个只出现一次的字符.这样的复杂度为O(n^2).   显然这样的效率不高. 这道题的大方向就是一题查找算法,常见的查找算法为顺序查找,二分查找,哈希查找.比较适合这道题的是哈希查找.首先我们可以建立一个256长度的数组

经典算法学习——冒泡排序

冒泡排序是我们学习的第一种排序算法.应该也算是最简单.最经常使用的排序算法了. 无论怎么说.学会它是必定的. 今天我们就用C语言来实现该算法. 演示样例代码已经上传至:https://github.com/chenyufeng1991/BubbleSort 算法描写叙述例如以下: (1)比較相邻的前后两个数据.假设前面数据大于后面的数据,就将两个数据交换: (2)这样对数组的第0个数据到N-1个数据进行一次遍历后.最大的一个数据就到了最后一个位置,也就是下标为N-1的位置(沉到了水底). (3)

经典算法学习之贪心算法

贪心算法也是用来求解最优化问题的,相比较动态规划很多问题使用贪心算法更为简单和高效,但是并不是所有的最优化问题都可以使用贪心算法来解决. 贪心算法就是在每个决策点都做出在当时看来最佳的选择. 贪心算法的设计步骤: 1.将最优化问题转换为:对其做出一次选择之后,只剩下一个问题需要求解的形式(动态规划会留下多个问题需要求解) 2.证明做出贪心选择之后,原问题总是存在最优解,即贪心算法总是安全的 3.证明做出贪心选择后,剩余的子问题满足性质:其最优解与贪心选择组合即可得到原问题的最优解,这样就得到了最