JS實現(xiàn)的常見算法

1.冒泡排序

function bubbleSort(arr) {
            var temp;                                //臨時交換變量
            let n = arr.length;                      //記錄數(shù)組長度
            let count=0;                             //計數(shù)赌莺,記錄一共進行了多少次交換
            //document.write('數(shù)組長度為:'+n+'<br />') //輸出數(shù)組成都
            for (let i=0; i<n; i++) {                //外層循環(huán),排序出數(shù)組的arr[i]的值
                    
                let flag=0;                          //交換標志
                for (let j=n-1; j>i; j-- ) {        //內(nèi)層循環(huán),從底往上冒泡,將小泡浮到arr[i]位置
                    //alert(0);
                    if (arr[j-1]>arr[j]) {           //比較兩個元素大小,并交換位置
                        temp=arr[j-1];
                        arr[j-1]=arr[j];
                        arr[j]=temp;
                        flag=flag+1;                 //確定交換標志
                        count=count+1;               //記錄比較元素的次數(shù)             
                        //console.log(flag);           
                        //console.log('共交換了:'+count+'次');
                    }
                    //console.log(arr)                 //輸出數(shù)組
                }
                if (flag==0) {                   //跳出循環(huán)
                    break;
                }
            }
            document.write('冒泡排序執(zhí)行次數(shù)為:'+count+'<br />')
            return arr;                              //返回數(shù)組
        }

2.簡單選擇排序

function selectSort(arr) {
        let temp;
        let n = arr.length;
        let count =0;
        for (let i=0; i<n; i++) {
            for (let j= i+1; j<n; j++) {
                count++;
                if (arr[j]<arr[i]) {
                    temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
                    
                }
            }
        }
        document.write('簡單選擇排序執(zhí)行次數(shù)為:'+count);
        return arr;
}

3.直接插入排序

function insertSort(arr) {
        let i,j;
        let n= arr.length;
        let count = 0;
        for (i=1; i<n; i++) {
            if (arr[i]<arr[i-1]) {
                arr[-1] = arr[i];                  //將i位置的值給哨兵          
                for (j=i-1; arr[j]>arr[-1];j--) {  //當(dāng)i位置前面的值比哨兵小,后移i位置的值虚倒,并插入哨兵到原先i位置
                    arr[j+1] = arr[j];
                    arr[j] = arr[-1];
                    count++;
                }
            }
        }
    document.write('直接插入排序執(zhí)行次數(shù)為:'+count);
    return arr;
}

4.希爾排序

function shellSort(arr) {
     let d = arr.length;
     let i;
     let temp; //暫存
     do {
        //設(shè)置增量
       d = Math.floor(d / 3) + 1;
       for (i = d ; i < arr.length; i++) {
         if (arr[i] < arr[i - d]) {
           temp = arr[i];
           for (var j = i - d; j >= 0 && temp < arr[j]; j -=d) {
               arr[j + d] = arr[j];
               arr[j] = temp;
           }
         }
       }
     }
     while (d > 1)
     return arr;
    }

5.去重算法

function unique(arr) {
            let brr=[];
            for (let i=0; i<arr.length; i++) {
                if (brr.indexOf(arr[i]) < 0) {
                    brr.push(arr[i]);
                }
            }
            return brr;
        }

6.快速排序

function partition(arr,low,high) {
        let temp=arr[low],   //基準值
            changetemp;      //用于交換的臨時變量
        while (low<high) {   
            while (low<high && arr[high]>=temp) {  
                high--;
            }               //當(dāng)從high往前掃時,大于基準值時,high--
            //swap(arr, low, high);   //當(dāng)從high往前掃時钱磅,小于基準值時,交換基準值和arr[high]位置
            changetemp=arr[low];
            arr[low]=arr[high];
            arr[high]=changetemp;
            while(low<high && arr[low]<=temp) {
                low++;
            }               //當(dāng)從low往后掃時似枕,小于基準值時盖淡,low++
            //swap(arr, low, high);  //當(dāng)從low往后掃時,大于基準值時菠净,交換基準值和arr[low]的位置
            changetemp=arr[low];
            arr[low]=arr[high];
            arr[high]=changetemp;

        }
        return low;
    }
    //快速排序
    function quick(arr,low,high) {
        let pivot;                 //定義樞軸值
        if (low < high) {
            pivot = partition(arr,low,high);    //求得第一個基準值第一次排序完的位置作為樞軸值
            quick(arr,low,pivot-1);             //對樞軸值前面的序列排序
            document.write(pivot+'<br />');
            quick(arr, pivot+1, high);          //對樞軸值后面的序列排序   
        }
        //return pivot;                        //返回樞軸值
        return arr;                            //返回排序后的數(shù)組
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末禁舷,一起剝皮案震驚了整個濱河市彪杉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌牵咙,老刑警劉巖派近,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異洁桌,居然都是意外死亡渴丸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門另凌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谱轨,“玉大人,你說我怎么就攤上這事吠谢⊥镣” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵工坊,是天一觀的道長献汗。 經(jīng)常有香客問我,道長王污,這世上最難降的妖魔是什么罢吃? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮昭齐,結(jié)果婚禮上尿招,老公的妹妹穿的比我還像新娘。我一直安慰自己阱驾,他們只是感情好就谜,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著里覆,像睡著了一般吁伺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上租谈,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天篮奄,我揣著相機與錄音,去河邊找鬼割去。 笑死窟却,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的呻逆。 我是一名探鬼主播夸赫,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼咖城!你這毒婦竟也來了茬腿?” 一聲冷哼從身側(cè)響起呼奢,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎切平,沒想到半個月后握础,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡悴品,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年禀综,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苔严。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡定枷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出届氢,到底是詐尸還是另有隱情欠窒,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布退子,位于F島的核電站贱迟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏絮供。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一茶敏、第九天 我趴在偏房一處隱蔽的房頂上張望壤靶。 院中可真熱鬧,春花似錦惊搏、人聲如沸贮乳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽向拆。三九已至,卻和暖如春酪耳,著一層夾襖步出監(jiān)牢的瞬間浓恳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工碗暗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颈将,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓言疗,卻偏偏與公主長得像晴圾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子噪奄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容