冒泡
原理就是前后两两比较,然后交换位置,需要注意的是,最后一次是不用循环的,因为在前一次位置已经发生了改变。
var Bubbling = function (arr) {
for (var i = 0, len = arr.length; i < len - 1; i++) {
for (var j = i + 1; j < len; j++) {
if (arr[i] > arr[j]) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
快排
原理就是设置i,j两个指针分别指向最左端和最右端,每次比较都从j指针开始向左移动寻找比基准数小的数后停止移动,然后指针i向右移动寻找比基准数大的数后停止移动,交换此时i,j所指向的内容,这算一趟中的一次交换完成,直到i,j指针相遇位置即找到k,将基准数和k位置的数字交换。
var arrs=[23,12,32,45,65,14,6,13];
var quickSort=function(arr,left,right){
if(left>right){
return;
}
var i=left,//左指针
j=right,//右指针
flag=arr[left];//基准
while(i!=j){//当i=j时,就代表已经找到了基准
//只要大于等于基准数,j指针一直向左移动,i<j是为了跳出i!=j
while(arr[j]>=flag&&i<j){
j--;
}
//只要小于等于基准数,i指针一直向右移动
while(arr[i]<=flag&&i<j){
i++;
}
//交换位置
if(i<j){
var temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
//交换基准值
arr[left]=arr[i];
arr[i]=flag;
//左边继续
quickSort(arr,left,i-1);
//右边继续
quickSort(arr,i+1,right);
}
quickSort(arrs,0,arrs.length-1);
console.log(arrs)