iOS常用演算法和資料結構

2021-09-24 23:15:08 字數 3514 閱讀 7054

1.集合結構 線性結構 樹形結構 圖形結構

1.1、集合結構:就是乙個集合,就是乙個圓圈中有很多個元素,元素與元素之間沒有任何關係 。

1.2、線性結構 :就是乙個條線上站著很多個人。 這條線不一定是直的。也可以是彎的。也可以是值的 相當於一條線被分成了好幾段的樣子。 線性結構是一對一的關係。

1.3、樹形結構 :做開發的肯定或多或少的知道xml 解析 樹形結構跟他非常類似。也可以想象成乙個金字塔。樹形結構是一對多的關係

1.4、圖形結構:這個就比較複雜了。 無窮、無邊、 無向(沒有方向)圖形機構 你可以理解為多對多 類似於我們人的交集關係。

資料結構的儲存一般常用的有兩種 順序儲存結構 和 鏈式儲存結構。

舉個列子。陣列。1-2-3-4-5-6-7-8-9-10。這個就是乙個順序儲存結構 ,儲存是按順序的 棧。做開發的都熟悉。棧是先進後出 ,後進先出的形式。hello world 在棧裡面從棧底到棧頂的邏輯依次為 h-e-l-l-o-w-o-r-l-d 這就是順序儲存 再比如 佇列 ,佇列是先進先出的對吧,從頭到尾 h-e-l-l-o-w-o-r-l-d 就是這樣排對的。

1-2-3-4-5-6-7-8-9-10 鏈式儲存就不一樣了 1(位址)-2(位址)-7(位址)-4(位址)-5(位址)-9(位址)-8(位址)-3(位址)-6(位址)-10(位址)。每個數字後面跟著乙個位址 而且儲存形式不再是順序 ,也就說順序亂了,1(位址) 1後面跟著的這個位址指向的是2,2後面的位址指向的是3,3後面的位址指向是誰你應該清楚了吧。他執行的時候是 1(位址)-2(位址)-3(位址)-4(位址)-5(位址)-6(位址)-7(位址)-8(位址)-9(位址)-10(位址),但是儲存的時候就是完全隨機的。

3.1 單向鍊錶

a->b->c->d->e->f->g->h. 這就是單向鍊錶  h 是頭 a 是尾  像乙個只有乙個頭的火車一樣 只能乙個頭拉著跑
3.2 雙向鍊錶

h<- a->b->c->d->e->f->g->h. 這就是雙向鍊錶。有頭沒尾。兩邊都可以跑  跟地鐵一樣 到頭了 可以倒著開回來
3.3 迴圈鍊錶

a->b->c->d->e->f->g->h. 繞成乙個圈。就像蛇吃自己的這就是迴圈。
4.1 什麼是二叉樹

樹形結構下,兩個節點以內 都稱之為二叉樹 不存在大於2 的節點 分為左子樹 右子樹 有順序 不能顛倒。
二叉樹有五種表現形式

1. 空的樹(沒有節點)可以理解為什麼都沒 像空氣一樣

2. 只有根節點。 (理解乙個人只有乙個頭 其他的什麼都沒,說的有點恐怖)

3. 只有左子樹 (乙個頭 乙個左手 感覺越來越寫不下去了)

4. 只有右子樹

5 、左右子樹都有

二叉樹可以轉換成森林 樹也可以轉換成二叉樹。

首先將所有待排序的數字放入工作列表中。

重複2號步驟(倒數的數字加1。例如:第一次到倒數第二個數字,第二次到倒數第三個數字,依此類推…),直至再也不能交換。

平均時間複雜度:o(n^2)

平均空間複雜度:o(1)

-(void)maopao

}}nslog(@"%@",arr);

}設陣列內存放了n個待排數字,陣列下標從1開始,到n結束。

i=1從陣列的第i個元素開始到第n個元素,尋找最小的元素。(具體過程為:先設arr[i]為最小,逐一比較,若遇到比之小的則交換)

將上一步找到的最小元素和第i位元素交換。

如果i=n-1演算法結束,否則回到第3步

平均時間複雜度:o(n^2)

平均空間複雜度:o(1)

-(void)xuanze

}}nslog(@"%@",arr);

}從第乙個元素開始,認為該元素已經是排好序的。

取下乙個元素,在已經排好序的元素序列中從後向前掃瞄。

如果已經排好序的序列中元素大於新元素,則將該元素往右移動乙個位置。

重複步驟3,直到已排好序的元素小於或等於新元素。

在當前位置插入新元素。

重複步驟2。

平均時間複雜度:o(n^2)

平均空間複雜度:o(1)

-(void)charu

[arr replaceobjectatindex:j withobject:[nsnumber numberwithinteger:temp]];

}nslog(@"%@",arr);

}-(void)xier

[arr replaceobjectatindex:j withobject:[nsnumber numberwithinteger:temp]];

}gap=gap/2;

}nslog(@"%@",arr);

}當資料量很大適宜採用該方法。 採用二分法查詢時,資料需是排好序的。

基本思想:假設資料是按公升序排序的,對於給定值x,從序列的中間位置開始比較,如果當前位置值等於x,則查詢成功;若x小於當前位置值,則在數列的前半段 中查詢;若x大於當前位置值則在數列的後半段中繼續查詢,直到找到為止。

從數列中挑出乙個元素,稱為 「基準」(pivot),

重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割之後,該基準是它的最後位置。這個稱為分割(partition)操作。

遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。

遞迴的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞迴下去,但是這個演算法總會結束,因為在每次的迭代(iteration)中,它至少會把乙個元素擺到它最後的位置去。

平均時間複雜度:o(n^2)

平均空間複雜度:o(nlogn) o(nlogn)~o(n^2)

把序列分成元素盡可能相等的兩半。

把兩半元素分別進行排序。

把兩個有序表合併成乙個。

nsmutablearray *temparray = [nsmutablearray arraywithcapacity:1];

for (nsnumber *num in ascendingarr)

while (temparray.count != 1)

}nslog(@"歸併公升序排序結果:%@", ascendingarr);

}

nsmutablearray *buckt = [self createbucket];

nsnumber *maxnumber = [self listmaxitem:ascendingarr];

nsinteger maxlength = numberlength(maxnumber);

for (int digit = 1; digit <= maxlength; digit++)

nsinteger index = 0;

for (int i = 0; i < buckt.count; i++)

}}nslog(@"基數公升序排序結果:%@", ascendingarr);

}

常用演算法和資料結構

氣泡排序 氣泡排序 每趟冒出乙個最大數 最小數 每次執行數量 總數量 執行的趟數 已冒出 public void bubblesort 選擇排序 選擇排序 每趟選擇乙個最大數 最小數 每次執行數量 總數量 執行的趟數 已選出 public void selectsort if i min displ...

演算法和資料結構

演算法和資料結構 演算法和資料結構 千絲萬縷的聯絡 縱觀各種演算法書籍,大多都是將演算法和資料結構作為乙個整體來講述。資料結構就是陣列 樹結構等儲存或表現物件資料的結構。將演算法和資料結構作為整體講述,是因為必須依照演算法中的常用操作選擇資料結構。例如,事先將資料儲存在適當的樹形結構中,大多數情況下...

演算法和資料結構

演算法 資料結構與演算法的關係是相互依賴不可分割的。演算法的定義 演算法是解決特定問題求解步驟的描述,在計算機中為指令的有限序列,並且每條指令表示乙個或多個操作。演算法的特性 有窮性 確定性 可行性 輸入 輸出。演算法設計的要求 正確性 可讀性 健壯性 高效率和低儲存量需求。演算法特性與演算法設計容...