一、快速排序
思想:
- 在数组中,选择一个元素作为基准;
- 所有小于基准的元素都移到基准的左边,大于基准的元素移到右边,此时基准元素所处的位置就是它的最终位置;
- 之后对基准左边和右边的两块区域,分别不断重复1和2的步骤,直到剩下一个元素位置;
代码:
function sort(arr,left,right) {
var standard = arr[left];
var i=left;
var j=right;
if(left>=right)return
while(i<j){
while(arr[j]>=standard&&j>i)j--;
while (arr[i]<=standard&&i<j)i++;
if(i<j){
[arr[i],arr[j]] = [arr[j],arr[i]]
}
}
arr[left] = arr[j];
arr[j]=standard;
sort(arr,left,i-1);
sort(arr,i+1,right);
return arr;
}
var arr=[3,88,44,38,55,12];
console.log(sort(arr,0,arr.length-1));
二、冒泡排序
思想:
- 对每一对相邻的元素进行比较,把较小的元素放在左边,较大的放在右边,从开始的第一对进行到数组最后一对,这样就会把最大的元素放在最后;
- 每一次循环都只会确定最大的那个元素,需要进行多次循环;
代码:
function BubbleSort(arr) {
for(var i=0;i<arr.length;i++){
for(var j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
[arr[j],arr[j+1]] = [arr[j+1],arr[j]]
}
}
}
return arr
}
var arr=[3,88,44,38,55,12]
console.log(BubbleSort(arr))
三、选择排序
思想:
- 在未排序的数组中,每次找到最小(大)的元素,把它放到起始位置;
- 在剩余的未排序的数组中,继续找最小的元素,把它放到这次数组的起始位置,直到只剩一个元素;
代码:
function quickSort(arr) {
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[j]<arr[i]){
[arr[i],arr[j]] = [arr[j],arr[i]]
}
}
}
return arr
}
var arr=[3,88,44,38,55,12]
console.log(quickSort(arr))
网友评论