1.冒泡排序
var ary=[0,1000,800,12,23,22,24,45,5,78,15,12,12,23,1245,56];
function bubbleSort(ary){
var temp=null;
// 做一个标记
var flag=false;
//1.循环ary.length-1次,在循环中每次拿第一项与后一项比较,大于后一项与其交换位置,(每轮可以循环出一个最大值放在最后);
// 2.做一个标记flag,标记是否循环过;
for(var i=0;i<ary.length-1;i++){
for(var j=0;j<ary.length-i-1;j++){
if (ary[j]>ary[j+1]){
temp=ary[j];
ary[j]=ary[j+1];
ary[j+1]=temp;
flag=true;
}
}
// 判断上一轮是否修改了,如果修改了,那把标记改为false,没有修改直接跳出大循环
if (flag){
flag=false;
}else{
break
}
}
return ary
}
var result=bubbleSort(ary);
console.log(result);
2.快速排序
var ary=[0,1000,800,12,23,22,24,45,33,78,15,12,12,23,1245,56];
function quickSort(ary){
// 1.判断需要排序的数组个数必须大于1个
if (ary.length<=1){
return ary
}
// 2.寻找中心的index,及对应的value,把中间值截取出来,注意返回的是数组
var pointIndex=Math.floor(ary.length/2);
var pointValue=ary.splice(pointIndex,1)[0];
var left=[];
var right=[];
// 3.循环剩下的值,与中间值做对比,分类
for(var i=0;i<ary.length;i++){
if (ary[i]>pointValue){
right.push(ary[i])
}else{
left.push(ary[i])
}
}
// 4.递归,对左边,右边数组重复操作,别忘了加中间截掉的值
return quickSort(left).concat([pointValue],quickSort(right))
}
var result=quickSort(ary)
console.log(result)
3.插入排序
var ary=[12,23,12,23,45,48,165,48,465,4,89,165];
function insetSort(ary){
// 1.创建新数组
var newAry=[];
// 2.去一个值放在新数组中
newAry.push(ary[0]);
for(var i=1;i<ary.length;i++){
var cur=ary[i];
// 3.新数组从后向前循环
for(var j=newAry.length-1;j>=0;){
// 4.新数组中的值大于比较值时
if (newAry[j]>cur){
// j--;当j==-1时,证明是最小的了,直接添加到开始
j--
if (j==-1){
newAry.unshift(cur)
}
}else{
// 5.否则就是很大喽,那就直接添加到J项后面,J+1项前面
newAry.splice(j+1,0,cur);
j=-1
}
}
}
return newAry
}
console.log(insetSort(ary))