五種排序

排序可以分為比較排序和非比較排序灸拍。比較排序是指在排序過程中嚷那,會將所有元素的值進(jìn)行比較,將小的或者是大的按照一個規(guī)律進(jìn)行“運動”氮采,最終形成一個有序的數(shù)組谋逻;非比較排序是利用自然數(shù)本身遞增的特點呆馁,記錄待排序數(shù)組中的元素以及個數(shù),按照自然數(shù)進(jìn)行從小到大輸出(該數(shù)組存在該自然數(shù)一次以上)毁兆。

冒泡排序

冒泡排序是比較排序的一種智哀。在兩個相鄰元素之間進(jìn)行兩兩比較,使得比較大的數(shù)不斷上升到右邊荧恍,就像是氣泡瓷叫,越往上冒越大屯吊,經(jīng)過每個數(shù)字至少冒泡一次的比較,可以使得右邊的數(shù)從大到小排列摹菠。


Bubble-Sort-3.png
Array.prototype.bubbleSort = function() {
  let len = this.length;
  let count = 0;
  
  if(len<2 || !this) {
    return this;
  }
  
  while(count < len-1) { 
    let swapFlag = false;
    for(var j=0;j<len-1;j++) {
      if(this[j] > this[j+1]) {
        var temp = this[j];
        this[j] = this[j+1];
        this[j+1] = temp;
        swapFlag = true;
      }
    }
    if(!swapFlag) break;
  }
  
  return this;
}

選擇排序

選擇排序也是比較排序的一種盒卸。從數(shù)組第一個元素位置開始,每次將剩余最小的元素放到當(dāng)前的位置上次氨,這樣經(jīng)過數(shù)組長度次數(shù)的比較與元素選擇蔽介,就可以將數(shù)組從小到大進(jìn)行排序。

selection sort.png
Array.prototype.selectSort = function() {
  let count = 0;
  
  while(count < this.length) {
    let minNum = this[count];
    let index = count;
    for(let i=count+1; i<this.length;i++) {
      if(this[i] <= minNum) {
        minNum = this[i];
        index = i;
      }
    }

    this[index] = this[count]; 
    this[count] = minNum;   
    count++;
  }
  
  return this;
}

插入排序

插入排序也是比較排序的一種煮寡。它的原理和平時生活里起撲克牌一樣虹蓄,每次拿到一張牌,將它插入后面比它大幸撕,前面比它小的位置上薇组,每張牌都是如此,當(dāng)牌拿完后坐儿,得到的就是一副從小到大的牌律胀。

insertion-sort-algorithm.jpg
Array.prototype.insertSort = function() {  
  for(let count = 1;count < this.length; count++) {
    let minNum = this[count];
    let temp = count -1;

    while(temp > 0 && this[temp] > minNum) {
      this[temp+1] = this[temp];
      temp--;
    }

    this[temp+1] = minNum;
  }
  
  return this;
}

快速排序

快速排序是比較排序的一種。它運用了分治的思想貌矿。每次選取數(shù)組的第一個作為數(shù)字基準(zhǔn)炭菌,比基準(zhǔn)小的排到基準(zhǔn)左邊,比基準(zhǔn)大的逛漫,排到基準(zhǔn)的右邊黑低,這樣一來,基準(zhǔn)的位置是唯一確定的酌毡。然后運用遞歸克握,將左邊再次作為一個數(shù)組進(jìn)行排序,選取基準(zhǔn)阔馋,左右分開玛荞,不斷遞歸娇掏。

javascript-quicksort.jpg
Array.prototype.quickSort = function() {
  const len = this.length;
  if(len < 2) return this;
  let basic = this[0], left = [], right = [];
  
  for(let i =1;i<len; i++) {
    if(this[i] <= basic) {
     left.push(this[i]);
    }else {
      right.push(this[i]);
    }
  }
  return left.quickSort().concat(basic, right.quickSort());
}

計數(shù)排序

計數(shù)排序是非比較排序呕寝,它是將所有的數(shù)組元素都記錄,用數(shù)組元素值作為鍵婴梧,元素出現(xiàn)的次數(shù)作為值下梢,存儲在一個類似于鍵值對的map類型中,當(dāng)遍歷完后塞蹭,存儲數(shù)組中有該值孽江,則將該值從小到大按照次數(shù)輸出,這樣就形成了一個有序的數(shù)組番电。

counting_sort_algorithm.png
Array.prototype.countSort = function() {
  const countArr = [];
  for(let i=0;i<this.length;i++) {
    if(countArr[this[i]]) {
      countArr[this[i]]++;
    }else {
      countArr[this[i]] = 1;
    }
  }

  const resultArr = [];
  for(let j =0;j<countArr.length;j++) {
    while(countArr[j]>0) {
      resultArr.push(j);
      countArr[j]--;
    }
  }
  return resultArr;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末岗屏,一起剝皮案震驚了整個濱河市辆琅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌这刷,老刑警劉巖婉烟,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異暇屋,居然都是意外死亡似袁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門咐刨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昙衅,“玉大人,你說我怎么就攤上這事定鸟《妫” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵仔粥,是天一觀的道長婴谱。 經(jīng)常有香客問我,道長躯泰,這世上最難降的妖魔是什么谭羔? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮麦向,結(jié)果婚禮上瘟裸,老公的妹妹穿的比我還像新娘。我一直安慰自己诵竭,他們只是感情好话告,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著卵慰,像睡著了一般沙郭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上裳朋,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天病线,我揣著相機(jī)與錄音,去河邊找鬼鲤嫡。 笑死送挑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的暖眼。 我是一名探鬼主播惕耕,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼诫肠!你這毒婦竟也來了司澎?” 一聲冷哼從身側(cè)響起欺缘,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挤安,沒想到半個月后浪南,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡漱受,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年络凿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昂羡。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡絮记,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出虐先,到底是詐尸還是另有隱情怨愤,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布蛹批,位于F島的核電站撰洗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏腐芍。R本人自食惡果不足惜差导,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猪勇。 院中可真熱鬧设褐,春花似錦、人聲如沸泣刹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽椅您。三九已至外冀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掀泳,已是汗流浹背雪隧。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留开伏,地道東北人膀跌。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓遭商,卻偏偏與公主長得像固灵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子劫流,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

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

  • 一巫玻、冒泡排序 (1)算法描述和實現(xiàn) 1丛忆、比較相鄰的元素。如果第一個比第二個大仍秤,就交換它們兩個熄诡; 2、對每一對相鄰元...
    yfsola閱讀 354評論 0 0
  • 概述 排序有內(nèi)部排序和外部排序诗力,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序凰浮,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,186評論 0 52
  • 圖解冒泡 以 [ 8苇本,2袜茧,5,9瓣窄,7 ] 這組數(shù)字來做示例笛厦,上圖來戰(zhàn): 從左往右依次冒泡,將小的往右移動 首先比較...
    五分鐘學(xué)算法閱讀 4,284評論 4 49
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個記錄插入到已排序好...
    依依玖玥閱讀 1,258評論 0 2
  • 算法學(xué)習(xí)其實是一種學(xué)習(xí)和提高思維能力的過程俺夕。無論是在面試還是實際的工作和生活中裳凸,都會碰見一些從沒遇到過的問題 真正...
    拉勾教育閱讀 1,506評論 0 1