【js基础】js排序方法——快排+堆排+插排+选择排

快排

        Array.prototype.fastSort = function(){
                 var arr = this;

                 function sort(left, right, arr){
                     if( left >= right){
                         return;
                     }
                     var key = arr[left];
                     var i = left;
                     var j = right;
                     
                     while(i < j){
                         while(i < j && arr[j] >= key){
                             j--;
                         }
                         arr[i] = arr[j];
                         while(i < j && arr[i] <= key){
                             i++;
                         }
                         arr[j] = arr[i];
                     }
                     arr[i] = key;
                     sort(left, i - 1, arr);
                     sort(i + 1, right, arr);
                 }

                 sort(0, arr.length - 1, arr);

                 return arr;
             }

插排

        Array.prototype.insertSort = function(){
                 var arr = this;
                 var len = arr.length;
                 for(var i = 1; i < len; i ++ ){
                     var j = i - 1;
                     var tmp = arr[i];
                     while(j >= 0 && tmp < arr[j]){
                         arr[j + 1] = arr[j];
                         j--;
                     }
                     if(j != i - 1){
                         arr[j + 1] = tmp;
                     }
                 }
                 return arr;
             }

选择排序

        Array.prototype.selectSort = function(){
                 var arr = this;
                 var len = arr.length;
                 var min;
                 var tmp;
                 for(var i = 0; i < len - 1; i ++ ){
                     min = i;
                     for(var j = i + 1; j < len; j++){
                         if(arr[min] > arr[j]){
                             min = j;
                         }
                     }
                     if(min != i){
                         tmp = arr[min];
                         arr[min] = arr[i];
                         arr[i] = tmp;
                     }
                 }
                 return arr;
             }

 

堆排序

       Array.prototype.swap = function(i, j){
                var tmp = this[i];
                this[i] = this[j];
                this[j] = tmp;
            }

            //大顶堆
            Array.prototype.buildMaxHeap = function(){
                for(var i = Math.floor(this.length/2) - 1; i >= 0; i--){
                    this.heapAdjust(i, this.length);
                }
            };

            //调整堆
            Array.prototype.heapAdjust = function(i, j){
                var max = i;
                var left = 2 * i + 1;
                var right = 2 * i + 2;
                if(left < j && this[max] < this[left]){
                    max = left;
                }                 
                if(right < j && this[max] < this[right]){
                    max = right;
                }                 
                if(max != i){
                    this.swap(i,max);
                    this.heapAdjust(max,j);
                };
            }
            
            //堆排序
            Array.prototype.heapSort = function(){
                this.buildMaxHeap();
                for(var i = this.length - 1; i >= 0 ; i--){
                    this.swap(0, i);
                    this.heapAdjust(0, i);
                }
                return this;
            };

 

转载于:https://www.cnblogs.com/codelovers/p/4799095.html

### 回答1: 智能插排项目使用了Freertos和Lwip技术,分别实现了实时操作系统和网络协议栈的功能。该项目设计了一个智能插排,可以通过互联网远程控制它的开关,实现智能化家居生活。 通过Freertos固件,智能插排可以实现实时任务调度和多任务处理,确保开关操作的实时性和稳定性。Lwip技术提供了底层网络通信功能,使得智能插排可以连接到远程服务器,实现远程控制。 智能插排工作原理为:智能插排通过无线网络连接到远程服务器,接收来自服务器的信号后,通过驱动控制继电器的开关,实现远程控制。同时,智能插排还具备本地控制功能,通过物理按钮可以进行手动开关。 该智能插排还可以通过手机APP进行控制,使得使用者可以实现远程控制和定时开关的功能。同时,还可以通过获取智能插排的工作状态,实现低功耗管理和智能节能。 总之,通过使用Freertos和Lwip技术,智能插排项目实现了远程控制和本地控制的功能,为家居生活带来更便利的体验。 ### 回答2: 智能插排项目是一项利用现代智能技术设计的智能家居产品,旨在提高家庭生活中的舒适度和便利程度。在该项目中,采用了两种关键的技术模块,分别是FreeRTOS和lwIP。这两种技术模块可以说是智能插排项目的核心组成部分,下面将分别介绍。 FreeRTOS是一个开放源代码的实时操作系统内核,用于嵌入式系统中。在智能插排项目中,它的作用是负责管理和分配系统资源,以实现实时性和并行性。它的特性包括:多任务处理、支持时间片、内存保护和任意抢占等。 lwIP是一个轻量级的TCP/IP协议栈,用于嵌入式系统中。在智能插排项目中,它的作用是处理网络通信任务,如网络协议处理、数据传输和连接管理。相对于其他TCP/IP协议栈,lwIP具有更小的内存占用和更好的运行效率,并且支持各种网络协议,如TCP、UDP、IPv4和IPv6等。 综上所述,智能插排项目的FreeRTOS和lwIP两个技术模块各自承担着不同的职责,但都是实现该项目的关键所在。FreeRTOS的实时性和多任务处理能力可以保证系统高效运行,而lwIP的网络协议处理和连接管理能力可以保证系统网络通信流畅无阻。两个模块的应用使得智能插排项目在智能家居市场中具有一定的竞争优势。 ### 回答3: 智能插排项目是一种智能家居设备,它可以实现远程控制、计时开关等功能,方便人们的生活。为了实现这些功能,该项目采用了两个开源软件:FreeRTOS和lwIP。 FreeRTOS是一款实时操作系统。它提供了一些基本的函数,如任务管理、时间管理、内存管理等,这些函数可以帮助我们快速开发实时系统。在智能插排项目中,FreeRTOS可以用来实现多任务管理,例如,我们可以为定时开关任务、远程控制任务等编写单独的任务,这样可以提高系统可靠性和安全性。 lwIP是一款轻量级的TCP/IP协议栈,它可以在嵌入式系统中运行。lwIP的主要特点是轻量级、高效、可移植性强。在智能插排项目中,lwIP可以用来实现TCP/IP通讯功能,例如,远程控制信号的传输,以及动态获取IP地址等。通过lwIP,我们可以实现智能插排的网络通信功能。 综上所述,智能插排项目可以利用FreeRTOS和lwIP提供的基础功能,实现多任务管理、远程控制、定时开关等功能。这些功能可以帮助人们更方便地控制家居设备,提高生活的品质和便利性。同时,利用开源软件可以降低项目的开发成本和风险,提高项目的可靠性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值