冒泡算法
就是两两比较到最后
代码
function bubble(arr){
var length=arr.length;
//外循环:长度为5,只要循环4次
//n-1的顺序排好之后,第N个自然也就拍好了
for(var i=0;i<length-1;i++){
//内循环:外面排好一次,里面就少一次:-i;
//最多也只要长度-1次
for(var j=0;j<length-i-1;j++){
if(arr[j]>arr[j+1]){
var temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp
}
}
}
console.log(arr);
}
选择排序
就是每次选出最小的排在前面
- 关键点,从0的位置开始,比较简单
- 用到了选择最大的一个数!
function inset(arr) {
for(var i=0;i<arr.length-1;i++){
var min=i;
for(var j=i+1;j<arr.length;j++){
if(arr[j]<arr[min]){
min=j
}
}
var temp=arr[min];
arr[min]=arr[i]
arr[i]=temp;
}
console.log(arr);
}
插入排序
- 从arr[1]开始拿出每个数与之前的数进行比较
- 要用常量temp来保存比较数
function insert(arr){
var length=arr.length;
for(var i=1;i<length;i++){
var temp=arr[i];
var j=i;
//j-1>=0;就是说arr[j-1]要取到arr[0]
while(arr[j-1]>temp&&j-1>=0){
arr[j]=arr[j-1];
j--;
}
arr[j]=temp;
}
console.log(arr);
}
insert(arr)
希尔排序
- 三个循环
- 高级版的插入排序
let gap=Math.floor(arr.length/2)
while(gap>=1){
for(var i=gap;i<arr.length;i++){
var j=i;
var temp=arr[i]
//通过gap来进行分组
while(arr[j-gap]>temp&&j>gap-1){
arr[j]=arr[j-gap];
j-=gap;
}
arr[j]=temp;
}
gap=Math.floor(gap/2)
快排顺序
function quickSort(arr,begin,end){
if(begin>=end){
return
}
var l=begin;
var r=end;
var temp=arr[begin]
while(l<r){
while(l<r&&arr[r]>=temp){
r--;
}
while(l<r&&arr[l]<=temp){
l++;
}
[arr[l],arr[r]]=[arr[r],arr[l]]
}
[arr[begin],arr[l]]=[arr[l],arr[begin]]
quickSort(arr,begin,l-1);
quickSort(arr,l+1,end)
}