思路:利用快速排序,次数超过长度一半那么必然位于middle右侧或者middle的位置
var swapQuictSort=(array,left,right)=>{
var aux=array[left];
array[left]=array[right];
array[right]=aux;
console.log(array+" \n ")
};
// 快速排序
var partition=(array,left,right)=>{
var len=array.length;
// 从数组中随机选取一个数字
var pivot=array[Math.floor(Math.random()*len)],
i=left,
j=right;
document.write(pivot);
while(i<=j){
while(array[i]<pivot){
i++;
}
while(array[j]>pivot){
j--;
}
if(i<=j){
swapQuictSort(array,i,j);
i++;
j--;
}
}
return i;
};
//找出长度超过数组长度一半的数字,
var MoreThanNumber=(array)=>{
if(!array){
return;
}
var len=array.length;
var middle=Math.floor(len/2);
var left=0;
var right=len-1;
var arr1=partition(array,left,right);
while(arr1!=middle){
if(arr1>middle){
right=arr1-1;
arr1=partition(array,left,right);
}else{
left=arr1+1;
arr1=partition(array,left,right)
}
}
var result=array[middle];
var count=0;
// 没有找到的话
var times=array.reduce((array,result)=>{
for(result in array){
count++;
}
if(count<middle){
return;
}
console.log(array);
return result;
});
}
var array=[1,2,2,3,2,2,4,4,4,4];
var pp=MoreThanNumber(array);
console.log(pp);