数构学习之排序算法

73 阅读1分钟

排序算法的实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //创建列表类
        function ArrayList(){
            //属性
            // (要排序的元素 都是存放在一个数组中的)
            this.array = []

            // 方法
            // 将数据可以插入到数组中的方法
            ArrayList.prototype.insert = (item) => {
                this.array.push(item)
            }
            // toString
            ArrayList.prototype.toString = () => {
                return this.array.join('-')
            }
            //交换两个位置的数据
            ArrayList.prototype.swap = (m,n) => {
                let temp = this.array[m]
                this.array[m] = this.array[n]
                this.array[n] = temp
            }
            // 实现排序算法
            // 冒泡排序
            ArrayList.prototype.bubblesort = () => {
                // 1.获取数组的长度
                let length = this.array.length
                for(let j = length - 1;j >= 0;j--){
                    //第一次进来: i = 0,比较 0 和 1 位置的两个数据,如果0位置大于1位置的数据
                    //最后一次进来: i=length-2,比较 length-2 和 length-1 两个数据的值
                    for(let i = 0;i < j;i++){
                        if(this.array[i] > this.array[i+1]){
                            // 交换两个数据:也可以使用数组的解构赋值
                            this.swap(i,i+1)
                        }
                    }
                }
            }
            // 选择排序
            ArrayList.prototype.selectionSort = () => {
                //1.获取数组的长度
                let length = this.array.length
                //2.外层循环:从0位置开始取数据
                for(let j = 0;j < length - 1;j++){
                    //内层循环:从 i+1 位置开始,和后面的数据进行比较
                    let min = j
                    for(let i = j + 1;i < length;i++){
                        if(this.array[min] > this.array[i]){
                            min = i
                        }
                    }
                    this.swap(min,j)
                }
            }
            // 插入排序
            // 希尔排序
            // 快速排序
        }

        // 测试类
        let list = new ArrayList()
 
        // 插入元素
        list.insert(66)
        list.insert(555)
        list.insert(20)
        list.insert(13)
        list.insert(88)
        // console.log(list)
        //验证冒泡排序
        // list.bubblesort()
        // console.log(list.toString())
        //验证选择排序
        list.selectionSort()
        console.log(list.toString())
    </script>
</body>
</html>