是将一个杂乱无章的数组进行一个快速排序,可以先从一个数组中取一个中间值。
排序算法,通过特定的算法因式将一组或多组数据按照既定模式进行重新排序。这种新序列遵循着一定的规则,体现出一定的规律,对于排序,我要求其具有一定的稳定性,即当两个相同的元素同时出现于某个序列之中,则经过一定的排序算法之后,两者在排序前后的相对位置不发生变化。
常见的排序算法:
1、选择排序,选择排序的基本思想是,基于直接选择排序和堆排序这两种基本的简单排序方法。首先从第1个位置开始对全部元素进行选择,选出全部元素中最小的给该位置,再对第2个位置进行选择,在剩余元素中选择最小的给该位置。
2、快速排序,通过一趟排序算法把所需要排序的序列的元素分割成两大块,其中,一部分的元素都要小于或等于另外一部分的序列元素,然后仍根据该种方法对划分后的这两块序列的元素分别再次实行快速排序算法,排序实现的整个过程可以是递归的来进行调用。
3、插入排序,通过一次插入一个元素的方式按照原有排序方式增加元素。这种比较是从该有序序列的最末端开始执行,即要插入序列中的元素最先和有序序列中最大的元素比较,若其大于该最大元素,则可直接插入最大元素的后面即可,否则再向前一位比较查找直至找到应该插入的位置为止。
1、通过正则判断。
var ary = new Array("111","ff","222","aa","222");
alert(mm(ary));
// 验证重复元素,有重复返回true;否则返回false
function mm(a){return /(\x0f[^\x0f]+)\x0f[\s\S]\1/test("\x0f"+ajoin("\x0f\x0f") +"\x0f");}
2、通过数组排序,比较临近元素,可指出重复的元素。
var ary = new Array("111","22","33","111","22");
var nary = arysort();
for(var i = 0; i < narylength - 1; i++){
if (nary[i] == nary[i+1]){alert("重复内容:" + nary[i]);}
}
3、通过字符串查找。
var ary = new Array("111","22","33","111","22");
var s = aryjoin(",") +",";
for(var i = 0; i < arylength; i++){
if(sreplace(ary[i] + ",", "")indexOf(ary[i] +",") > -1){alert("重复内容:" + ary[i]);}
}
4、通过哈希
var ary = new Array("111","22","33","111","22");
alert(isRepeat(ary));// 验证重复元素,有重复返回true;否则返回false
function isRepeat(arr) {
var hash = {};
for(var i in arr) {
if(hash[arr[i]]){return true;}
// 不存在该元素,则赋值为true,可以赋任意值,相应的修改if判断条件即可
hash[arr[i]] = true;}
return false;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)