数码资讯
javascript中几种排序算法的简单实现
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
排序算法的实现
我的JS水平是渣渣,所以我用一种排序算法,编写Javascript在某种程度上类似于java和c
这里我不讲算法原理,只是代码实现,可能有bug,欢迎大家的博客评论指导。
插入排序
的插入排序算法描述(插入排序)是一个简单而直观的排序算法。它的工作原理是找到相应的位置,将无序的数据通过有序序列的构造和向后扫描在有序序列,插入排序通常是由地方的排序(即排序只是额外的空间需要O(1))。因此,在向前扫描的过程中,我们需要一步一步地移动排序的元素,以提供最新元素的插入空间。
实现代码如下所示:
函数插入排序(ARR){
如果(!ARR)返回;
VaR len = arr.length;
如果(len = 0 | | len = = 1)返回;
对于(var i = 1,len = arr.length;我< len;i++){
VaR站= ARR {我};
对于(var j = i 1;j = 0;j){
如果(ARR { J } >站){
{ 1 } = J + ARR ARR {,};
{人}
ARR { } =站j + 1;
打破;
}
}
}
报酬;
}
时间复杂度是:o(n = 2)
当然,该算法进行了优化,例如,将搜索和替换位置算法更改为两个点查找。
冒泡排序
经典的排序算法,指冒泡排序,我很心痛。在本科阶段,必须对论文中的冒泡排序算法进行改进,写论文后的结果不能完成冒泡排序算法,这是令人尴尬的。
如果(!ARR)返回;
VaR len = arr.length;
如果(len = 0 | | len = = 1)返回;
对于(var i = 0;i < i;i + +){
对于(var j=0;j i i - 1;j + +){
如果(ARR { J } > ARR { j + 1 }){
var tmp = { 1 }度{J}.;
{ 1 } = J + ARR ARR {,};
ARR { } = TMP {J}.;
}
}
}
报酬;
}
时间复杂度是:o(n = 2)
快速排序
非常经典的排序算法,主要分为三个排序过程:
从序列中挑选一个元素,称为枢轴;
重新排序序列,所有元素小于参考值的所有元素都放在参考的前面,比基准中摆的参考值(任何一个边都是相同的数字);
递归(递归)的子数柱,小于基准值元素和子数柱,大于基准值元素分类。
实现代码如下所示:
功能快速排序(ARR,BT,ED){
如果(bt < ED){
VaR支点= findpartition(ARR,BT,ED);
QuickSort(ARR,BT,枢轴- 1);
QuickSort(ARR,支点+ 1,ED);
}
}
功能findpartition(ARR,BT,ED){
VaR站= ARR BT } {;
当(bt < ED){
当(bt =站){
ed;
}
如果(bt < ED){
ARR { BT + } = { } ARR ED;
}
而(BT版<< ARR { } <= BT站){
bt +;
}
如果(bt < ED){
ARR { ED = ARR { BT } *;
}
}
{转} =站到达;
返回BT;
}
时间复杂度为O(nlogn)。
归并排序
这是一个非常经典的排序算法,我只是通过学习JS来复习经典的排序算法。合并排序的思想可以参考我的博客:合并排序。
function mergeSort(ARR,BT,ED){
如果(bt < ED){
VaR中= BT + parseInt((艾德- BT) / 2);
MergeSort(ARR,BT,MID);
MergeSort(ARR,中秋+ 1,ED);
mergearray(ARR,BT,中旬,ED);
}
}
功能mergearray(ARR,BT,中旬,ED){
VaR马尔= { };
var i = BT,j =中+ 1;
当(i =中j = ED){
如果(ARR {我} { } { ARR J)
MArr.push(ARR {我+ });
{人}
MArr.push(ARR { J++ });
}
}
如果(i中){
马尔= marr.concat(arr.slice(我,中秋+ 1));
}
如果(J ED){
马尔= marr.concat(arr.slice(J,ED+1));
}
对于(var H = 0;h<marr.length;H + +){
ARR { BT + H } =马尔{H};
}
}
写归并排序和一个小插曲:JS是不会自动取整,然后使用parseInt方法,感觉孟梦达。
我的JS水平是渣渣,所以我用一种排序算法,编写Javascript在某种程度上类似于java和c
这里我不讲算法原理,只是代码实现,可能有bug,欢迎大家的博客评论指导。
插入排序
的插入排序算法描述(插入排序)是一个简单而直观的排序算法。它的工作原理是找到相应的位置,将无序的数据通过有序序列的构造和向后扫描在有序序列,插入排序通常是由地方的排序(即排序只是额外的空间需要O(1))。因此,在向前扫描的过程中,我们需要一步一步地移动排序的元素,以提供最新元素的插入空间。
实现代码如下所示:
函数插入排序(ARR){
如果(!ARR)返回;
VaR len = arr.length;
如果(len = 0 | | len = = 1)返回;
对于(var i = 1,len = arr.length;我< len;i++){
VaR站= ARR {我};
对于(var j = i 1;j = 0;j){
如果(ARR { J } >站){
{ 1 } = J + ARR ARR {,};
{人}
ARR { } =站j + 1;
打破;
}
}
}
报酬;
}
时间复杂度是:o(n = 2)
当然,该算法进行了优化,例如,将搜索和替换位置算法更改为两个点查找。
冒泡排序
经典的排序算法,指冒泡排序,我很心痛。在本科阶段,必须对论文中的冒泡排序算法进行改进,写论文后的结果不能完成冒泡排序算法,这是令人尴尬的。
如果(!ARR)返回;
VaR len = arr.length;
如果(len = 0 | | len = = 1)返回;
对于(var i = 0;i < i;i + +){
对于(var j=0;j i i - 1;j + +){
如果(ARR { J } > ARR { j + 1 }){
var tmp = { 1 }度{J}.;
{ 1 } = J + ARR ARR {,};
ARR { } = TMP {J}.;
}
}
}
报酬;
}
时间复杂度是:o(n = 2)
快速排序
非常经典的排序算法,主要分为三个排序过程:
从序列中挑选一个元素,称为枢轴;
重新排序序列,所有元素小于参考值的所有元素都放在参考的前面,比基准中摆的参考值(任何一个边都是相同的数字);
递归(递归)的子数柱,小于基准值元素和子数柱,大于基准值元素分类。
实现代码如下所示:
功能快速排序(ARR,BT,ED){
如果(bt < ED){
VaR支点= findpartition(ARR,BT,ED);
QuickSort(ARR,BT,枢轴- 1);
QuickSort(ARR,支点+ 1,ED);
}
}
功能findpartition(ARR,BT,ED){
VaR站= ARR BT } {;
当(bt < ED){
当(bt =站){
ed;
}
如果(bt < ED){
ARR { BT + } = { } ARR ED;
}
而(BT版<< ARR { } <= BT站){
bt +;
}
如果(bt < ED){
ARR { ED = ARR { BT } *;
}
}
{转} =站到达;
返回BT;
}
时间复杂度为O(nlogn)。
归并排序
这是一个非常经典的排序算法,我只是通过学习JS来复习经典的排序算法。合并排序的思想可以参考我的博客:合并排序。
function mergeSort(ARR,BT,ED){
如果(bt < ED){
VaR中= BT + parseInt((艾德- BT) / 2);
MergeSort(ARR,BT,MID);
MergeSort(ARR,中秋+ 1,ED);
mergearray(ARR,BT,中旬,ED);
}
}
功能mergearray(ARR,BT,中旬,ED){
VaR马尔= { };
var i = BT,j =中+ 1;
当(i =中j = ED){
如果(ARR {我} { } { ARR J)
MArr.push(ARR {我+ });
{人}
MArr.push(ARR { J++ });
}
}
如果(i中){
马尔= marr.concat(arr.slice(我,中秋+ 1));
}
如果(J ED){
马尔= marr.concat(arr.slice(J,ED+1));
}
对于(var H = 0;h<marr.length;H + +){
ARR { BT + H } =马尔{H};
}
}
写归并排序和一个小插曲:JS是不会自动取整,然后使用parseInt方法,感觉孟梦达。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。