1、直接插入排序
基本操作是将一个记录插入到已经排好序的表中,从而得到一个行的记录数增1的有序表。
思路:列表已经放入一个数,第二个数与其比较,如果比他大就放在后面,如果比他小就将原来的数往后移动一个单位,将第二个数放在这个位置。后面继续添加数,与列表中已经排好序的数,进行比较。
function sort(arr){
//从第二个数开始,分别于前面的数比较
for(var i=1; i<arr.length; i++){
for(var j=0; j<i; j++){
if(arr[i]<arr[j]){
var temp=arr[i];
for(var k=i; k>j; k--){
arr[k]=arr[k-1];
}
arr[k]=temp;
}
}
}
return arr;
}
2.希尔排序
原理:对于数比较多的排序,之前的插入排序只有在基本有序和数较少的时候的效率才会很高。而希尔排序不需要,希尔排序分割排序记录减少待排序记录的个数。将相距某个“增量”的记录组成一个子序列,这样才能保证在子序列内分别进行直接插入排序后的到的结果是基本有序而不是局部有序。
function sort(arr){
var increment = arr.length;
do{
increment=parseInt(increment/3+1);
for(var i=increment; i<arr.length; i++){
for(var j=i-increment; j<i; j+=increment){
if(arr[i]<arr[j]){
var temp=arr[i];
for(var k=i; k>j; k-=increment){
arr[k]=arr[k-increment];
}
arr[k]=temp;
}
}
}
}
while(increment > 1);
return arr;
}