1. 快速排序
原理:
第一步:选择中间元素mid作为基准。单独拿出来放到新数组,原来数组中去掉这个元素。第一步:选择中间元素mid作为基准。单独拿出来放到新数组,原来数组中去掉这个元素。
第二步:按照数组的顺序,将每个元素和这个mid比较,所有比它小的都放到左边新空数组left中,所有比它大的放到右边right中。
第三步:对左右两个数组,分别做第一步和第二步的比较,直到只剩下一个元素为止。最后做数组拼接。
代码实现如下:
var ary=[6,3,9,5,23,66,8];
function quickSort(ary) {
if(ary.length<=1){
return ary; //这个条件一定要放在前面
}
var midIndex=Math.floor(ary.length/2);
var midItem=ary.splice(midIndex,1)[0];//splice获取的是删除的那项组成的新数组
var left=[];
var right=[];
for(var i=0;i<ary.length;i++){
var cur=ary[i];
if(cur<=midItem){
left.push(cur);
}else{
right.push(cur);
}
}
return quickSort(left).concat(midItem,quickSort(right));
}
2.冒泡排序
原理: 冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序。
<script>
var ary=[6,3,9,5,23,66,8];
function bubbleSort(ary) {
var flag=true;
for(var i=0;i<ary.length-1;i++){ //定义循环的轮数
for(var j=0;j<ary.length-1-i;j++){ // 定义每轮循环的次数
if(ary[j]>ary[j+1]){
var temp=ary[j];
ary[j]=ary[j+1];
ary[j+1]=temp;
flag=false;
}
}
if(flag){
return ary;
}
}
return ary;
}
console.log(bubbleSort(ary));
</script>
3.插入排序
原理:将一组数据分成两组,分别将其称为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。就这样,每次插入一个元素,有序组增加,待插入组减少。直到待插入组元素个数为0。注意,插入过程中涉及到了元素的移动。
<script>
function chaRuSort(ary) {
var newAry=[];
newAry.push(ary.shift());//newAry.push(arr[0]);
for(var i=0;i<ary.length;i++){
var cur=ary[i];
for(var j=0;j<newAry.length;j++){
if(cur<newAry[j]){
newAry.splice(j,0,cur);
break;
}else{
if(j===newAry.length-1){
newAry.push(cur);
break;
}
}
}
}
return newAry;
}
var ary=[2,6,9,23,10,22,8];
var res=chaRuSort(ary);
console.log(res);
</script>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。