选择排序
定义:
1.找到数组中最小的,放在第一位.
2.找到剩余未排序的数组中最小的,将最小的跟剩余数组第一位交换。
3.重复第二步,直到剩余数组只有一项。
实现:
let array=[3,4,6,7,89,1];
let min,temp;
for(let i=0;i<array.length-1;i++){
min=i;
for(let j=i+1;j<array.length;j++){
if(array[j]<array[min]){
min=j;
}
}
temp=array[min];
array[min]=array[i];
array[i]=temp
}
冒泡排序
定义:
1.从头开始,两两比较,把大的放后面,直到最大的跑到数组最后一位。
2.数组比较元素不考虑最大的,重复步骤1,直到只剩下一个元素,默认放在第一位.
实现:
let array=[3,4,6,7,89,1];
let temp;
for(let i=0;i<array.length-1;i++){
for(let j=0;j<array.length-i-1;j++){
if(array[j]>array[j+1]){
temp=array[j]
array[j]=array[j+1]
array[j+1]=temp
}
}
}
插入排序
定义:
从第二项开始,拿出【该项】数据,空出位置,往前比较,找到比【该项】大的,大值向后移动一位,一直向前比较,直到没有比【该项】大的,此时大值向后移动留出的【位置】,将【该项】放到此【位置】。直到原数组最后一项也找到自己的位置。(很容易想到的是,每次拿出的该项,其前面的值都是排好序的)。
实现:
let array=[3,4,6,7,89,1];
let key;
for(let i=1;i<array.length;i++){
key=array[i];
j=i-1;
while(j>=0&&array[j]>key){
array[j+1]=array[j];
j--;
}
array[j+1]=key
}
希尔排序 (显然shell是个人)
定义:
将数组分成n/2(向下取整,为了是确保最后一项也参与进来)组,让每组中数组位置相差一致。然后针对该组进行插入排序。直到每项相差只有一,采用一次插入排序即可完成整体排序
实现:
let array=[3,4,6,7,89,1];
for(let interval=Math.floor(array.length/2);interval>0;interval=Math.floor(interval/2)){
for(let i=interval;i<array.length;i++){
let j=i;
let key=array[i]
while(j>0&&array[j-interval]>key){
array[j]=array[j-interval]
j-=interval
}
array[j]=key;
}
}
console.log(array)
快速排序
定义:
1.找到一个基准值,将数组中小于基准值的【数组a】放到基准值左边,大于基准值的【数组b】放到基准值右边,
2.对【数组a】及【数组b】执行同样的操作,生成数组c\d\e\f;
3.对生成的数组执行1,直到生成的数组只有一项,排序结束。
let array=[3,4,6,7,89,1];
function partByPivot(array){
if(array.length<=1){
return array;
}
else{
let arrayA=[],arrayB=[];
let pivot=array[0];
for(let i=1;i<array.length;i++){
if(array[i]>=pivot){arrayB.push(array[i])}
else{arrayA.push(array[i])};
}
return [...partByPivot(arrayA),pivot,...partByPivot(arrayB)]
}
}