排序

1. 冒泡排序

  • 中心思想:數(shù)組內(nèi)數(shù)值,從左向右兩兩依次比較隐绵,挑出最大值缠局,并向后移動(dòng),移動(dòng)結(jié)果妈拌,移動(dòng)一輪最大值總能出現(xiàn)在數(shù)組最后(冒泡)

  • 算法主要的邏輯
    第一輪:數(shù)組內(nèi)第一個(gè)和第二個(gè)依次比較拥坛,無論結(jié)果怎樣,第二個(gè)和第三個(gè)比較尘分,直至第n個(gè)(n為數(shù)組長度)猜惋,比較了n-1次,倒數(shù)第一個(gè)數(shù)培愁。
    第二輪:數(shù)組內(nèi)第一個(gè)和第二個(gè)依次比較著摔,無論結(jié)果怎樣,第二個(gè)和第三個(gè)比較定续,直至第n-1個(gè)谍咆。比較了n-2次,比較的末尾是倒數(shù)第二個(gè)數(shù)
    第三輪:---
    第n+1輪: ---

所以我們需要的變量有私股, 描述總共需要多少輪的變量i ,一輪需要比較多少次的變量j摹察,我們忽視的無論結(jié)果(需要準(zhǔn)備一個(gè)交換位置的函數(shù))。 其中變量a 和庇茫,變量b 港粱,均和數(shù)組的長度有關(guān)系。
i的行為: 從 0 增加 到 arr.length, 那么很簡單旦签,for循環(huán)查坪。
j的行為:從0增加到arr.length for循環(huán)
i和j 關(guān)系: i=0 ,執(zhí)行 j 從0 到 arr.length-1; 所以,應(yīng)該是 b循環(huán)宁炫,嵌套在a 循環(huán)內(nèi)部偿曙。

然后就可以寫函數(shù)了。

function maopao(arr){
  for(var i=0;i<arr.length;i++){
    for(var j=0;j<arr.length-1-i;j++){
      if(arr[j]<=arr[j+1]){
        
      }else{
        replace(arr,j)
      }
    }
  }
  return arr
}
function replace(arr,j){
  var middle= arr[j]
  arr[j]=arr[j+1]
  arr[j+1]=middle
}
var a=[2,8,3,32,4,9,4,8]
console.log(maopao(a))// 注意羔巢,命名函數(shù)的時(shí)候望忆,不允許有j+1這樣的變量,同時(shí)竿秆,如果我們傳進(jìn)去的是非引用類型启摄, 那么賦值是無效的。

2.選擇排序

  • 中心思想:把數(shù)組內(nèi)的第一個(gè)值與其他值依次比較幽钢,直到發(fā)現(xiàn)比第一個(gè)值還小的值歉备,記錄這個(gè)小的值,再與其他值比較匪燕,一輪結(jié)束蕾羊,總能選則出最小值與第一個(gè)值交換位置喧笔。

  • 主要邏輯:[a,b,c,d,e]
    第一輪:把第一個(gè)數(shù)當(dāng)做最小值,最小值分別和第二個(gè)數(shù)比較龟再,無論結(jié)果怎樣书闸,最小值與第三個(gè)數(shù)比較,利凑。浆劲。。截碴。直到第n個(gè)梳侨,比較了n-1次。比較的末尾是最后一個(gè)數(shù)日丹,交換最小值與第一個(gè)值的位置走哺。
    第二輪:從第二個(gè)值開始,重復(fù)上面的步驟哲虾。 比較次數(shù)丙躏,n-2次,比較的最后一次仍然是末尾束凑。交換min與第二個(gè)值的位置晒旅。
    第n輪:從第n個(gè)值,重復(fù)上面的步驟汪诉。比較次數(shù)0次废恋。交換n與第n個(gè)數(shù)。

所以扒寄,我們需要的變量有 輪數(shù)i ,次數(shù)j ,最小值min或者記錄最小值的位置indexofmin,一個(gè)交換位置的函數(shù)鱼鼓。

i的行為:從0增加到arr.length, 為什么是arr.length(假設(shè)有5個(gè)數(shù)该编,每輪挑選出最一個(gè)最小值迄本,要選幾輪才能選完?)
j的行為:從i+1一直比較到arr.length 课竣,從i+2一直比較到arr.length...
i與j的關(guān)系嘉赎,首先還是嵌套.
min的行為: min的初始值,總是等于arr[i],然后循環(huán)開始于樟,min不停的與arr[j]比較公条,如果大于arr[i]則被重新賦值。

function selectMin(arr){
  for(var i=0;i<arr.length;i++){
    var min=a[i]
    var indexofmin=i
    for(var j=i+1;j<arr.length;j++){
        if(min<=a[j]){
        }else{
          min=a[j]
          indexofmin=j
        }
    }
    replace(arr,i,indexofmin)
  }
  return arr
}
function replace(arr,i,indexofmin){
  var middle=arr[i]
      arr[i]=arr[indexofmin]
      arr[indexofmin]=middle
}

var a=[15,7,9,32,45,1,0,77,54]
console.log(selectMin(a))

3.插入排序

  • 中心思想:類似于起牌迂曲,把第一個(gè)數(shù)靶橱,當(dāng)起的第一張牌,把第二個(gè)數(shù)當(dāng)起的第三張牌,然后插到合適的位置抓韩。

  • 主要邏輯
    第一輪:起第一張牌
    第二輪:起第二張牌(數(shù)組第二個(gè)數(shù)),與第一張牌比大小鬓长,大的放在前面谒拴,小的放在后面。
    第三輪:起第三張牌(數(shù)組的第三個(gè)數(shù))涉波,先與第二張牌比較英上,大則不什么都不作,小則依次和第一張比較啤覆。苍日。。
    第n輪:起第n張牌窗声,先與n-1比較相恃。依次與第n-1張牌,n-2張牌比較笨觅,只要找到比n小的數(shù)拦耐,記錄這個(gè)數(shù)的位置插入。

所以见剩,我們需要的變量有輪數(shù)i杀糯,比較的次數(shù)j ,以及記錄中間最小值的indexmin。
i的行為:從0到arr.length
j的行為:每輪從i-1開始苍苞,與i比較固翰。
indexmin的行為:初始值均為i,記錄 i 或[j-1]~[0](也就是最小值)的位置羹呵。

function insert(arr){
  for(var i=1;i<arr.length;i++){
    var indexofinsert=i
        console.log(1)
      for(var j=i-1;j>-1;j--){
        if(a[i]>a[j]){
        }else{
          indexofinsert=j
        }
      }
    replace(arr,i,indexofinsert) 
  }
  return arr
}

function replace(arr,i,indexofinsert){
  arr.splice(indexofinsert,0,arr[i])
  arr.splice(i+1,1)
}


var a=[0,23,4]
console.log(insert(a))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末骂际,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子担巩,更是在濱河造成了極大的恐慌方援,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涛癌,死亡現(xiàn)場離奇詭異犯戏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)拳话,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門先匪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弃衍,你說我怎么就攤上這事呀非。” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵岸裙,是天一觀的道長猖败。 經(jīng)常有香客問我,道長降允,這世上最難降的妖魔是什么恩闻? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮剧董,結(jié)果婚禮上幢尚,老公的妹妹穿的比我還像新娘。我一直安慰自己翅楼,他們只是感情好尉剩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著毅臊,像睡著了一般理茎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上褂微,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天功蜓,我揣著相機(jī)與錄音,去河邊找鬼宠蚂。 笑死式撼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的求厕。 我是一名探鬼主播著隆,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼呀癣!你這毒婦竟也來了美浦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤项栏,失蹤者是張志新(化名)和其女友劉穎浦辨,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沼沈,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡流酬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了列另。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芽腾。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖页衙,靈堂內(nèi)的尸體忽然破棺而出摊滔,到底是詐尸還是另有隱情阴绢,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布艰躺,位于F島的核電站呻袭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏腺兴。R本人自食惡果不足惜棒妨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望含长。 院中可真熱鬧,春花似錦伏穆、人聲如沸拘泞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽陪腌。三九已至,卻和暖如春烟瞧,著一層夾襖步出監(jiān)牢的瞬間诗鸭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工参滴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留强岸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓砾赔,卻偏偏與公主長得像蝌箍,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子暴心,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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