一,冒泡排序
理解:冒泡排序就是将数组进行从小到大的排序,先找大的放在后面,双重循环来控制,第一层循环控制轮数,设控制变量为i,每一层循环则为想要找出的本数组中(arr.length-i)大的数,并将其放在第数组中的第i位;第二层循环为找出每轮循环中最大的数,并将其放在每轮循环的最后面
for(var i=arr.length-1;i<=0;i--){
for(var j=0;j<i;j++){
if(arr[j]>arr[j+1]){
var temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
二,选择排序
理解:选择排序就是将一个数组从小到大的排序,先找小的放在前面,双重循环来控制,第一层循环控制轮数,设控制变量为i,每一层循环则为想要找出的本数组中第i小的数,并放在所记录该循环的最小位置为i;第二层循环为找出每轮循环中最小的数,并将其放在每轮循环的最前面
for(var i=0;i<arr.length;i++){
var min=i;
for(var j=i;j<arr.length;j++){
if(arr[j]<arr[min]){
min=j;
}
}
if(i!=min){
[arr[i],arr[min]]=[arr[min],arr[i]];
}
}
三,奇偶排序
arr.sort((a,b)=>a-b);
var res=[];
var odd=1;
var ever=0;
arr.forEach((item)=>{
if(item%2==1){
res[odd]=item;
odd=odd+2;
}
else{
res[ever]=item;
ever=ever+2;
}
})
四,找出第k大元素
方法一:
function find(arr,k){
arr.sort((a,b)=>a-b);
var h=arr.length-k;
return arr[h];
console.log(arr);
}
console.log(find([1,3,4,2],2));
方法二:
function find(arr,k){
for(var i=arr.length;i>=arr.length-k;i--){
for(var j=0;j<i;j++){
if(arr[j]>arr[j+1]){
[arr[j],arr[j+1]]=[arr[j+1],arr[j]];
}
}
}
return arr[arr.length-k];
}
console.log(find([1,3,2,4],3))
五,找出排序后相邻元素之间的最大差值
方法一:
function findmaxcha(arr){
if(arr.length<2){
return 0;
}
arr.sort((a,b)=>a-b);
var max=0;
for(var i=0;i<arr.length-1;i++){
if((arr[i+1]-arr[i])>max){
max=arr[i+1]-arr[i];
}
}
return max;
}
console.log(findmaxcha([1,4,6,10]))
方法二:
function findmaxcha(arr){
var max=0;
if(arr.length<2){
return 0;
}
for(var i=arr.length-1;i>=0;i--){
for(var j=0;j<=i;j++){
if(arr[j]>arr[j+1]){
[arr[j],arr[j+1]]=[arr[j+1],arr[j]];
}
}
if(i<arr.length-1){
if(arr[i+1]-arr[i]>max){
max=arr[i+1]-arr[i]
}
}
}
return max;
}
console.log(findmaxcha([1,4,6,10]))
六,找出数组中排序后的最小正整数
方法一:
function fn(arr){
var res=arr.filter(item=>item>0);
res.sort((a,b)=>a-b);
if(res[0]!=1){
return 1;
}
for(var i=1;i<res.length;i++){
if((res[i]-res[i-1])!=1){
return res[i-1]+1;
}
}
return res.pop()+1;
}
console.log(fn([0,1,3]))
方法二:
function fn(arr){
var res=arr.filter(item=>item>0);
for(let i=0;i<res.length;i++){
let min=i;
for(let j=i;j<res.length;j++){
if(res[i]<res[min]){
min=j;
}
}
if(i!=min){
[res[min],res[i]]=[res[i],res[min]];
}
if(res[0]!=1){
return 1
}
if(res[i]!=i+1){
return i+1;
}
}
}
console.log(fn([0,5,3]))