Javascript实现的快速排序(排序)算法详解
目前,大约有七或八的最常用的排序算法,其中快速排序是最广泛使用的快。它是由图灵奖得主托尼·霍尔提出的(1934)1960。快速排序的概念很简单,整个排序过程只需要三步:
(1)在数据集中,选择一个元素作为轴心。
(2)所有小于基准的元素都移到数据的左边;大于基准的所有元素都移到数据的右边。
(3)在基准的左右两边重复两个子集的第一步和第二步,直到所有子集只剩下一个元素为止。
例如,现在有一组数据集{ 85, 24, 63、45, 17, 31、96, 50 },如何排序呢
第一步是选择中间元素45作为基准。(基准值可以任意选择,但中间的值更容易选择)。
第二步,按照顺序,将每个元素与基线比较,形成两个子集,一个小于45 ,另一个子大于45 。
第三步是重复两个子集的第一步和第二步,直到所有子集只剩下一个元素。
根据因特网上的信息,上述算法用Javascript语言实现。
首先,一个快速排序函数的定义,它的参数是一个数组。
无功快速排序=功能(ARR){
};
然后,检查数组中元素的数量,如果小于1返回。
无功快速排序=功能(ARR){
如果(arr.length <= 1){ return ARR;}
};
然后,选择并将其与原始数组分开,然后定义两个空数组,这些数组用于存储左右两个子集。
无功快速排序=功能(ARR){
如果(arr.length <= 1){ return ARR;}
无功pivotindex = math.floor(arr.length / 2);
VaR支点= arr.splice(pivotindex,1){ 0 };
var左};
var;
};
然后,您开始遍历数组,小于基准的元素将子集放在左边,该子集大于右子集中的基线元素。
无功快速排序=功能(ARR){
如果(arr.length <= 1){ return ARR;}
无功pivotindex = math.floor(arr.length / 2);
VaR支点= arr.splice(pivotindex,1){ 0 };
var左};
var;
对于(var i = 0;i < arr.length;i++){
如果(ARR {我} <支点){
Left.push(ARR {我});
其他{ }
Right.push(ARR {我});
}
}
};
最后,使用递归重复该过程,可以得到有序数组。
无功快速排序=功能(ARR){
如果(arr.length <= 1){ return ARR;}
无功pivotindex = math.floor(arr.length / 2);
VaR支点= arr.splice(pivotindex,1);
var左};
var;
对于(var i = 0;i < arr.length;i++){
如果(ARR {我} <支点){
Left.push(ARR {我});
其他{ }
Right.push(ARR {我});
}
}
返回快速排序(左),Concat(支点,快速排序(右));
};
无功dataarray = { 85,24,63,45,17,31,96,50 };
console.log(dataarray.join(
console.log(快速排序(dataarray)。加入(
希望本文能对大家的javascript程序设计有所帮助。