js 冒泡排序

 如果数字按升序排序,比较相邻数据,如果左侧小于右侧,则交换数组,最大的数值在相邻比较中被漂浮到最右边。像气泡一样从数组的一端漂浮到另一端。


function CArray(numElements) {
    this.dataStore = [];
    this.pos = 0;
    this.numElements = numElements;
    this.insert = insert;
    this.toString = toString;
    this.clear = clear;
    this.setData = setData;
    this.swap = swap;
    for (var i=0; i<numElements; ++i) {
        this.dataStore[i] = i;
    }
    this.bubbleSort = bubbleSort; //冒泡排序
}
//生成随机数
function setData() {
    for (var i=0; i<this.numElements; ++i) {
        this.dataStore[i] = Math.floor(Math.random() * (this.numElements +1))
    }
}
//清除所有数据
function clear() {
    for(var i=0; i<this.dataStore.length; i++) {
        this.dataStore[i] = 0;
    }
}
//插入数据
function insert(element) {
    this.dataStore[this.pos++] = element;
}
//显示数据
function toString() {
    var restr = "";
    for (var i=0; i<this.dataStore.length; i++) {
        restr += this.dataStore[i] + " ";
        if (i >0 && i % 10 == 10) {
            restr += "\n";
        }
    }
    return restr;
}
//交换数组元素
function swap(arr,index1,index2) {
    var temp = arr[index1];
    arr[index1] = arr[index2];
    arr[index2] = temp;
}
//最大的数值在相邻比较中被漂浮到最右边
function bubbleSort() {
    var numElements = this.dataStore.length;
    var temp;
    //若总数为n,第一次遍历0到n-1,n-1的位置为数值最大值,
    // 第二次遍历0到n-2,n-2的位置为数值最大值,直到n为1时
    for (var outer=numElements; outer >=2; outer--) {
        for (var inner=0; inner<=outer-1; inner++) {
            if (this.dataStore[inner] > this.dataStore[inner +1]) {
                swap(this.dataStore,inner, inner +1);
            }
        }
    }
}

var numElements = 10;
var myNums = new CArray(numElements);
//生成10个随机数
myNums.setData();
//打印随机数
console.log(myNums.toString());
//冒泡排序
myNums.bubbleSort();
//打印排序后的值
console.log(myNums.toString());




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值