zoukankan      html  css  js  c++  java
  • 2.排序算法实现(JavaScript版)-冒泡-选择-快速排序

    以下代码都是JavaScript实现

    1.冒泡排序

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <script>
            //排序的本质是比较和交换
    
            //-----------冒泡排序-------begin---------//
            //写一个冒泡排序函数
            function sort(arr){
                for(var i = 0; i < arr.length; i++){
                    for(var j = 0; j < arr.length - 1 - i; j++){
                        if(compare(arr[j], arr[j + 1])){
                            exchange(arr, j, j + 1);
                        }
                    }
                }
            }
    
            //写一个比较函数
            function compare(a, b){//升序
                return (a > b) ? true : false;
            }
    
            //写一个交换函数
            function exchange(arr, a, b){
                var temp = arr[a];
                arr[a] = arr[b];
                arr[b] = temp;
            }
            //-----------冒泡排序-------end---------//
            //冒泡排序测试
            var arr = [5, 4, 3, 2, 1];
            sort(arr);
            console.log(arr);
    
        </script>
    </body>
    </html>
    冒泡排序.html

    2.选择排序

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <script>
            //排序的本质是比较和交换
    
            
            //-----------选择排序-------begin-------//
            //写一个选择排序函数
            function sort(arr){
                //选择排序,内层循环,每次挑出一个最大的值,放到最后面
                for(var i = 0; i < arr.length; i++){
                    var maxIndex = 0;//每次都假设最大值在arr[0]上
                    for(var j = 0; j < arr.length - i; j++){
                        if(compare(arr[maxIndex], arr[j])){
                            maxIndex = j;//替换最大值的索引
                        }
                    }
                    exchange(arr, maxIndex, arr.length - 1 - i);//每圈循环后,把最大值放在最后
                }
            }
    
            //写一个比较函数
            function compare(a, b){//升序
                return (a < b) ? true : false;
            }
    
            //写一个交换函数
            function exchange(arr, a, b){
                var temp = arr[a];
                arr[a] = arr[b];
                arr[b] = temp;
            }
            //-----------选择排序-------end-------//
            //选择排序测试
            var arr1 = [5, 4, 3, 2, 1];
            sort(arr1);
            console.log(arr1);
    
    
        </script>
    </body>
    </html>
    选择排序.html

    3.简单的快速排序

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <script>
            //排序的本质是比较和交换
    
            //-----容易理解的快速排序-----begin---//
            function quickSort(arr){
                if(arr == null || arr.length == 0) return [];
                //选出排头兵
                var header = arr[0];
                var left = [];
                var right = [];
                for(var i = 1; i < arr.length; i++){
                    if(arr[i] > header){//比排头兵大的放右边
                        right.push(arr[i]);
                    }else{//比排头兵小的放左边
                        left.push(arr[i]);
                    }
                }
                
                
                //左边和右边再次快速排序
                left = quickSort(left);
                right = quickSort(right);
                left.push(header);//把排头兵加到左边最后
                return left.concat(right);//返回左右分开后的数组
            }
            //-----容易理解的快速排序-----begin---//
            //容易理解的快速排序测试
            var arr2 = [9, 3, 5, 6, 2, 1, 7, 8, 0, 4];
            console.log(quickSort(arr2));
    
        </script>
    </body>
    </html>
    简单的快速排序.html

    4.标准的快速排序

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <script>
            //排序的本质是比较和交换
    
    
            //----标准的快速排序--------begin-----//
            function standardQuickSort(arr, begin, end){
                if(begin >= end) return;//若开始位置大于等于结束位置,直接返回
                var left = begin;//左 指向 头
                var right = end;//右 指向 尾
                do{
                    do left++; while(left < right && arr[left] < arr[begin])//left右移一位,比较left和right的大小,以及比较arr[left]和arr[begin]的大小
                    do right--; while(right > left && arr[right] > arr[begin])//right左移一位,比较left和right的大小,以及比较arr[right]和arr[begin]的大小
                    if(left < right) exchange(arr, left, right);//交换左右的值,说明arr[left]>arr[begin]并且arr[right]<arr[begin];
                }while(left < right)//当L < R时,一直执行循环
                var swapPoint = left == right ? right - 1 : right;//判断arr[begin]要放在数组的位置
                exchange(arr, begin, swapPoint);//交换位置
                standardQuickSort(arr, begin, swapPoint);//比arr[begin]小的重新排序
                standardQuickSort(arr, swapPoint + 1, end);//比arr[begin]大的重新排序
            }
    
            function exchange(arr, a, b){
                var temp = arr[a];
                arr[a] = arr[b];
                arr[b] = temp;
            }
            //----标准的快速排序--------end-------//
            //标准的快速排序测试
            var arr3 = [9, 8, 7, 6, 5, 4, 3, 2, 1];
            standardQuickSort(arr3, 0, arr3.length);
            console.log(arr3);
    
        </script>
    </body>
    </html>
    标准的快速排序.html
  • 相关阅读:
    jedis scan实现keys功能
    java简单实现一个阻塞式线程池
    Swift运算符
    数组的使用(1)
    Linux 常用命令
    Task02:基础查询与排序
    Task01:初识数据库
    摩尔投票法
    面向对象暑期课程总结
    xpath+requests+peewee——CSDN论坛全方位爬虫
  • 原文地址:https://www.cnblogs.com/lanshanxiao/p/13181244.html
Copyright © 2011-2022 走看看