day05 9.30

數組

數據結構

數據結構顧名思義 就數據的結構 (邏輯結構 存儲結構 算法)

存儲結構 (數據存儲的結構方式)

線性結構

數組(順序表)

隊列

鏈表

非線性結構

hash(散列表)

只要是能存數據的容器 就必須具備增刪改查的方法

數組

數組概述:數組固定一類數據的組合(一般情況下我們數組里面的數據類型一致)(多個數據)

數組的聲明(引用數據類型)

1.使用[] 聲明數組

//里面的數據以,進行分隔

vararr=[1,2,3]

2.使用new 關鍵詞進行聲明 (對象)

vararr=newArray(10)//里面參數指定對應的長度 如果你沒有寫 表示長度為0

vararr2=newArray(1,2,3,4)//當前數組里面的數據有 1 2 3 4

length屬性來訪問對應的長度(也可以進行設置)

vararr=newArray()

//通過length來訪問數組的長度

console.log(arr.length);

arr.length=11//設置對應的長度

console.log(arr);

下標訪問

console.log(arr[0])//獲取第一個

//可以允許字符串

console.log(arr['0']);//獲取第一個

數組的賦值

arr[0]=10

console.log(arr[0])//10

// 給數組里面的元素隨機給值

vararr=newArray()

for(vari=0;i<10;i++){

arr[i]=Math.random()//0-1 包含0 不包含1的

}

console.log(arr);

數組遍歷

傳統的for循環(huán)遍歷

vararr=[1,2,3,45,12]

//利用順序表的特點 有序

for(vari=0;i<arr.length;i++){

? ? console.log(arr[i])

}

for in遍歷 (對象 下標 迭代器 next)

vararr=[1,2,3,45]

for(varindexinarr){//index表示的為下標

? ? console.log(arr[index])

}

for of進行遍歷(數組 迭代器來實現的)

//使用for of遍歷(只能遍歷數組)

for(varvalueofarr){//value表示的是里面值

console.log(value)

}

數組的方法

數組是一個存儲結構(增刪改查的操作)

添加 (add push append..)

棧方法 (先進后出 后進先出)push 入棧 pop出棧操作

push方法(添加到最后一個)

var arr = [1]

arr.push(10)

console.log(arr) //[1,10]

隊列方法(先進先出 后進后出)

unshift方法(添加到第一個)

var arr = [1]

arr.unshift(10)

console.log(arr) //[10,1]

刪除 (delete(硬刪) remove(軟刪)..)

棧方法

pop方法(刪除最后面)

var arr = [1,2,3]

arr.pop() //下標不寫的

console.log(arr) //[1,2]

隊列方法

shift方法(刪除第一個)

var arr = [1,2,3]

arr.shift()

console.log(arr) //[2,3]

修改 (replace替換 update 更新)

反轉 reverse(將最后一個變到第一個 一個個對應的換位置)

//改變原本的數組

var arr = [1,2,3,4,8]

var arr1 = arr.reverse(); //返回一個數組 這個數組就是反轉后的數組

arr1.unshift(10) //返回的反轉后的數組其實就我們原本的數組

console.log(arr) //反轉后的結果 [8,4,3,2,1]

console.log(Object.is(arr1,arr));//true

排序 sort

//sort方法排序 //默認情況下他是根據第一個字符的ACSII碼進行排序 (ACSII碼排序)

var arr2 = [15,20,11,4,5]

arr2.sort() //返回一個數組 這個數組是排序好的數組 他跟上面一樣 就是返回的這個數組其實就是原本的數組

console.log(arr2);

// sort 其實是一個高階函數 高階函數就是里面用函數做為參數的函數

var arr3 = [15,20,11,4,5]

arr3.sort(function(a,b){

? ? //1 和 -1來進行大小區(qū)分和排序規(guī)則

? ? return? b-a //a-b是正序 b-a就倒序

})

console.log(arr3);

不影響原本數組的方法

concat (連接)

//不會影響原本數組的方法 返回新的數組

var arr = [1,2,3,4]

var arr1 = [1,2,3,4]

var arr2 = [1,2,3,4]

var arr3 = [1,2,3,4]

// concat 連接 把多個數組變成一個數組 返回 ...擴展運算符 打開數組取出里面的值(...證明可以寫任意個) ? 表示可寫可不寫

var newArr = arr.concat(arr1,arr2,arr3)

console.log(newArr);

slice (截取)

// slice 切片 把一個數組里面東西提出 返回的新的數組

var sliceArr = arr.slice()//全切

console.log(sliceArr);

var sliceArr1 = arr.slice(0)//從0開始切到最后 如果下標不存在返回一個空數組

console.log(sliceArr1);

var sliceArr2 = arr.slice(2,3)//包含結束的下標 包含開始的下標

console.log(sliceArr2);

splice 方法 (刪除)

//splice會影響之前的數組 刪除 截取 插入

var arr = [12,13,45]

//參數 開始位置 刪除的個數(可以寫可以不寫 數組的length) 返回一個新的數組

// var newArr =? arr.splice(0) //從開始刪

// console.log(newArr);

console.log(arr);

var newArr =? arr.splice(1,2) //從開始刪

console.log(newArr);

//獲取刪除的內容 其實就截取里面的內容(不足是會改變之前的數組)

排序算法

1.冒泡排序 (最基礎的排序) O(n^2)

//冒泡排序核心點 倆個for循環(huán)嵌套 第一個躺數 相當于length-1 第二個每躺比較是遞減

//相鄰的倆個相比 j和j+1相比

function bubble(arr){

? ? //遍歷數組

? ? for(var i=1;i<arr.length;i++){

? ? ? ? //判斷對應的沒有比較的值

? ? ? ? for(var j=0;j<arr.length-i;j++){

? ? ? ? ? ? //相鄰的倆個進行比較

? ? ? ? ? ? if(arr[j]>arr[j+1]){

? ? ? ? ? ? ? ? //換位置

? ? ? ? ? ? ? ? var temp = arr[j]

? ? ? ? ? ? ? ? arr[j] = arr[j+1]

? ? ? ? ? ? ? ? arr[j+1] = temp

? ? ? ? ? ? }

? ? ? ? }

? ? }

? ? return arr

}

2.選擇排序 (選擇最大值的下標(或者最小值的下標)進行比較的排序)O(n^2)

function selecter(arr){

? ? //遍歷數組

? ? for(var i=0;i<arr.length;i++){

? ? ? ? var min = i //記錄最小下標 默認當前的i

? ? ? ? for(var j=i+1;j<arr.length;j++){ //遍歷后面的內容

? ? ? ? ? ? //如果當前值比最小值還小

? ? ? ? ? ? if(arr[j]<arr[min]){

? ? ? ? ? ? ? ? //記錄一下這個下標

? ? ? ? ? ? ? ? min = j

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? //判斷當前最小下標是否為開始的默認下標 不是就換位置

? ? ? ? if(min!=i){

? ? ? ? ? ? //換位置

? ? ? ? ? ? var temp = arr[min]

? ? ? ? ? ? arr[min] = arr[i]

? ? ? ? ? ? arr[i] = temp

? ? ? ? }

? ? }

? ? return arr

}

3.快速排序 (在數據量不多最快的 冒泡排序的進階)二分 O(nLogn)

function quick(arr){

if(arr.length<=1){

return arr

}

//定義左邊數組 右邊數組 基數

var left = [],right = [] ,mid=arr[0]

//遍歷數組

for(var i=1;i<arr.length;i++){

arr[i]>mid?right.push(arr[i]):left.push(arr[i])

}

return quick(left).concat([mid],quick(right))

}

4.希爾排序 (插入排序的進階)

5.插入排序 (插入數據的時候進行排序)

6.歸并排序 (大數據排序的常用排序算法)

.....

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末鹃两,一起剝皮案震驚了整個濱河市族操,隨后出現的幾起案子,更是在濱河造成了極大的恐慌威沫,老刑警劉巖婿滓,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啼辣,死亡現場離奇詭異,居然都是意外死亡裙戏,警方通過查閱死者的電腦和手機乘凸,發(fā)現死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挽懦,“玉大人翰意,你說我怎么就攤上這事⌒攀粒” “怎么了冀偶?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長渔嚷。 經常有香客問我进鸠,道長,這世上最難降的妖魔是什么形病? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任客年,我火速辦了婚禮霞幅,結果婚禮上,老公的妹妹穿的比我還像新娘量瓜。我一直安慰自己司恳,他們只是感情好,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布绍傲。 她就那樣靜靜地躺著扔傅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烫饼。 梳的紋絲不亂的頭發(fā)上猎塞,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音杠纵,去河邊找鬼荠耽。 笑死,一個胖子當著我的面吹牛比藻,可吹牛的內容都是我干的铝量。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼韩容,長吁一口氣:“原來是場噩夢啊……” “哼款违!你這毒婦竟也來了唐瀑?” 一聲冷哼從身側響起群凶,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哄辣,沒想到半個月后请梢,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡力穗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年毅弧,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片当窗。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡够坐,死狀恐怖,靈堂內的尸體忽然破棺而出崖面,到底是詐尸還是另有隱情元咙,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布巫员,位于F島的核電站庶香,受9級特大地震影響,放射性物質發(fā)生泄漏简识。R本人自食惡果不足惜赶掖,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一感猛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奢赂,春花似錦陪白、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至袖瞻,卻和暖如春司致,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背聋迎。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工脂矫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人霉晕。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓庭再,卻偏偏與公主長得像,于是被迫代替她去往敵國和親牺堰。 傳聞我的和親對象是個殘疾皇子拄轻,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內容

  • 數據結構 劃分 存儲結構 (存儲對應的數據的) 邏輯結構(邏輯的體現) 算法 存儲結構的相關的內容 線性結構(有順...
    學習路上閱讀 93評論 0 1
  • 01乘法口訣表 /* row = 1 for (var col = 1; col <= 9; ...
    桑葚_1194閱讀 190評論 0 0
  • 數組 什么是數組? 字面理解就是 數字的組合 其實不太準確伟葫,準確的來說數組是一個 數據的集合 也就是我們把一些數據...
    蝸牛的愿望正在緩沖中閱讀 229評論 0 0
  • javascript基礎五 對象 JavaScript 中的所有事物都是對象:字符串恨搓、數值、數組筏养、布爾斧抱、日期、數學...
    Viarotel閱讀 308評論 0 6
  • 一渐溶、便利: var arr[‘1’辉浦,true,,3,4茎辐,5]宪郊; arr[arr.length]=‘c’; for(...
    _z王箭閱讀 128評論 0 0