排序算法之桶排序,冒泡排序,快速排序

本文介绍了桶排序、冒泡排序及快速排序三种基本排序算法的实现原理与JavaScript代码实现。通过具体的示例,展示了如何利用这些算法对随机生成的整数数组进行排序。

桶排序

问题:将一个包含5个整数(都是0-10的随机数)的数组从小到大排列

思路:
- 创建一个一维数组(长度为11,每一项都为0)arr
- 若第第一个数是5,则arr[5]的值加1,将为五个数都遍历
- 将不为0的项打印出来

js实现代码:

arr = Array(11).fill(0);
let p_arr = randomNumber(5)
let n_arr = [];
//生成随机数组
function randomNumber(count) {
    var randomArroy = [];
    for(var i of Array(count)) {
        randomArroy.push(parseInt(Math.random() * 11) + 1);
    }
    console.log(randomArroy);
    return randomArroy
}
function sort_t() {
    for(var i = 0; i < p_arr.length; i++) {
        arr[p_arr[i]]++;
    }
        for(var j=0;j<11;j++){
        for(var k=0;k<arr[j];k++){
            n_arr.push(j);
        }
    }
    console.log(n_arr);
}
sort_t();

冒泡排序

问题:将一个包含5个整数(都是0-10的随机数)的数组从小到大排列

思路:
- 比较两个相邻的元素
- 按特定顺序交换元素
- 遍历所有元素后,剔除得到的最大的或最小的元素继续遍历

js实现代码:

function randomNumber(count) {
                var randomArroy = []
                for(var i of Array(count)) {
                    randomArroy.push(parseInt(Math.random() * 100) + 1)
                }
                console.log(randomArroy)
                return randomArroy
            }

            function bubbling(arr) {

                for(let i = 0; i < arr.length - 1; i++) {
                    let m;
                    for(let j = 0; j < arr.length - i - 1; j++) {
//                                  if(arr[j]>arr[j+1]){
//                                      m=arr[j];
//                                      arr[j]=arr[j+1];
//                                      arr[j+1]=m;
//                                  }
                        //坑点:冒号与逗号的优先级不确定导致的错误
//                      arr[j] < arr[j + 1] ? {} : m = arr[j], arr[j] = arr[j + 1], arr[j + 1] = m;
//                      arr[j] < arr[j + 1] ? {} : (m = arr[j], arr[j] = arr[j + 1], arr[j + 1] = m);
                        arr[j] < arr[j + 1] ? {} : function(){m = arr[j], arr[j] = arr[j + 1], arr[j + 1] = m}();
                    }
                }
                console.log(arr);
            }
            bubbling(randomNumber(10));

            function bubbleSort(arr) {
                // var a=((new Date).getTime());
                for(var i = 0; i < arr.length - 1; i++) {
                    var tmp;
                    for(var j = 0; j < arr.length - i - 1; j++) {
                        if(arr[j] > arr[j + 1]) {
                            tmp = arr[j];
                            arr[j] = arr[j + 1];
                            arr[j + 1] = tmp;
                        }
                    }
                }
                // console.log((new Date).getTime()-a) ;
                return arr;
            }
            //      console.log(bubbleSort(randomNumber(10)));

快速排序

问题:将一个包含10个整数(都是0-100的随机数)的数组从小到大排列

思路:
- 取中间数为基准数
- 比基准数小的放在左边数组,比基准数大的放在右边数组
- 将得到的数组重复以上操作直到排序完成

            //随机数函数
            function randomNumber(count) {
                var randomArroy = []
                for(var i of Array(count)) {
                    randomArroy.push(parseInt(Math.random() * 100) + 1)
                }
                console.log(randomArroy)
                return randomArroy
            }
            var a = randomNumber(10);

            function quickSort(a) {
                if(a.length <= 1) {
                    return a;
                }
                let left = [],right = [],temp = [];
                key = Math.floor(a.length / 2);
                temp = a.splice(key, 1);
                for(var i = 0; i < a.length; i++) {
                    temp>a[i]?left.push(a[i]):right.push(a[i]);
                }
                return quickSort(left).concat(temp, quickSort(right));
            }
            console.log(quickSort(a));

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值