1. 程式人生 > 遊戲 >《永劫無間》3月31日更新公告 地圖更新、英雄調整等

《永劫無間》3月31日更新公告 地圖更新、英雄調整等

選擇排序

function SelectSort(arr){
    let i,j;
    let min;
    for(j=0;j<=arr.length-2;j++){
        min=j;
        for(i=j;i<=arr.length-1;i++){
            if(arr[i]<arr[min]){
                min=i;
            }
        }
        swap(arr,j,min);
    }
    output(arr);
}

氣泡排序

function BubbSort(arr){
    let i,j;
    
for(j=arr.length-1;j>=1;j--){ for(i=0;i<=j;i++){ if(arr[i]>arr[i+1]){ swap(arr,i,i+1); } } } output(arr); }

插入排序

function InsertSort(arr){
    let i,j;
    for(i=1;i<arr.length-1;i++){
        for(j=i;j>=1&&arr[j]<arr[j-1];j--){
            swap(arr,j,j
-1); } } output(arr); }

歸併排序

function MergeSort(arr,l,r){
    let mid;
    if(l<r){
        mid=Math.floor((l+r)/2);
        MergeSort(arr,l,mid);
        MergeSort(arr,mid+1,r);
        Merge(arr,l,mid,r);
    }
}
function Merge(arr,l,mid,r){
    let help=new Array(r-l+1);
    let p1,p2,i;
    i
=0; p1=l;p2=mid+1; while(p1<=mid&&p2<=r){ help[i++]=arr[p1]<arr[p2]?arr[p1++]:arr[p2++]; } while(p1<=mid){ help[i++]=arr[p1++]; } while(p2<=r){ help[i++]=arr[p2++]; } for(i=0;i<=r-l;i++){ arr[l+i]=help[i]; } }

快排(荷蘭國旗問題引出快排)

function QuickSort(arr,l,r){
    if(l<r){
        let Random=Math.floor(l+Math.random()*(r-l));
        swap(arr,Random,r);
        let p=GuoQi(arr,l,r);
        QuickSort(arr,l,p[0]);
        QuickSort(arr,p[1],r);
    }
}
function GuoQi(arr,l,r){
    let less,more,i;
    let flag=arr[r];
    less=l-1;more=r;i=l;
    while(i<more){
        if(arr[i]<flag){
            swap(arr,++less,i++);
        }
        else if(arr[i]>flag){
            swap(arr,--more,i);
        }
        else{
            i++;
        }
    }
    swap(arr,more++,r);
    let tmp=new Array(less,more);
    return tmp;

}

堆排

function HeapSort(arr){
    let i;heapsize=arr.length-1;
    /*for(i=heapsize;i>=0;i--){
        HeapIfy(arr,i,heapsize);
    }*/
    for(i=1;i<=heapsize;i++){
        HeaInsert(arr,i);
    }
    while(heapsize>=0){
        swap(arr,0,heapsize--);
        HeapIfy(arr,0,heapsize);
    }
    output(arr);
}
function HeapIfy(arr,index,heapsize){
    while(index*2+1<=heapsize){
        let max=index*2+1;
        if((index*2+2)<=heapsize&&arr[index*2+2]>arr[index*2+1]){
            max =index*2+2;
        }
        if(arr[index]>=arr[max]){
            break;
        }
        else{
            swap(arr,index,max);
            index=max;
        }
    }

}
function HeaInsert(arr,index){
    while(arr[index]>arr[(index-1)/2]){
        swap(arr,index,(index-1)/2);
        index=(index-1)/2;
    }
}

基數排序

function RadixSort(arr){
    let digit=GetMaxDigit(arr);
    let radix=10;
    let count=new Array(10);
    let i,j,p;
    for(p=0;p<=9;p++){
        count[p]=new Array();
    }
    for(i=0;i<=digit;i++){
        for(j=0;j<=arr.length-1;j++){
            p=GetDigit(arr[j],i);
            count[p].push(arr[j]);
        }
        j=0;
        for(p=0;p<=9;p++){
            if(count[p]){
                for(let tmp in count[p]){
                    arr[j++]=count[p].shift();
                }
            }
        }

    }
    output(arr);
}
function GetMaxDigit(arr){
    let max=0;
    for(let i=0;i<=arr.length-1;i++){
        max=arr[max]>arr[i]?max:i;
    }
    let ret=0;
    if(Math.floor(arr[max]/10)!=0){
        ret++;
    }
    return ret;
}
function GetDigit(num,d){
    for(let i=0;i<d;i++){
        Math.floor(num/=10);
    }
    return Math.floor(num%10);
}

一些呼叫

function swap(arr,p1,p2){
    [arr[p1],arr[p2]]=[arr[p2],arr[p1]];
}

function output(arr){
    for(let i in arr){
        console.log(arr[i]);
    }
}

let arr =new Array(3,2,4,6,1,7,3,5,9);
//SelectSort(arr);
//BubbSort(arr);
//InsertSort(arr);
//l=0;r=arr.length-1;
//MergeSort(arr,l,r);
//output(arr);
//QuickSort(arr,l,r);
//output(arr);
//HeapSort(arr);
RadixSort(arr);