###開篇 作為程式開發,真的需要演算法麼,這個問題確實一直來被討論,知乎,論壇,各個地方都交織著對他的討論,那麼作為一個iOS開發,我們到底需要演算法麼?個人感覺還是需要的。 ####為什麼我們要了解演算法 那麼為什麼我們需要了解演算法呢,下面先放一個個人覺得說的還不錯的觀點,從知乎上看到的一個回答。傳送門,的確我們可以自己做一個APP並讓他上線用不到多少的演算法知識,但是從長遠來看,如果勵志做一個技術人員,有良好的邏輯思維能力,單純的碼程式碼是不夠的,我們要做的不能知識簡單的造輪子,我們還需要去了解更多的東西,有時候對技術的追求才是我們前進的動力。 ####生活中的演算法 我們生活中還是一直籠罩著演算法的,從大學的資料結構到很久前的第一次用oc去寫一個氣泡排序,再到現在的幾乎面試必問的演算法知識(包括我們公司(一_一.)他彷彿始終圍繞著我們的程式生涯。今天我們就從最常見的氣泡排序開始吧。
- 氣泡排序 在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。下面就上程式碼吧先來個C語言版
int i, j, temp;
int a[] = {1,3,9,8,2,4,5,7,6,0,11};
int length = sizeof(a)/sizeof(a[0]);
for (j = 0; j < length; j++)
{
for (i = 0; i < length - j - 1; i++)
{
if (a[i] > a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
for (i = 0; i < length; i++)
{
printf("%d,", a[i]);
}
printf("\n");
複製程式碼
然後看一波我們熟悉的OC版
NSMutableArray *p = [[NSMutableArray alloc] initWithObjects:@"3",@"5",@"4",@"1",@"9",@"0",nil];
for (int i = 0; i<p.count; i++)
{
for (int j=i+1; j<p.count; j++)
{
int a = [p[i] intValue];
int b = [p[j] intValue];
if (a > b)
{
[p replaceObjectAtIndex:i withObject:p[j]];
[p replaceObjectAtIndex:j withObject:[NSString stringWithFormat:@"%d",a]];
}
}
}
NSLog(@"%@",p);
複製程式碼
出了這些之外,還有插入排序,選擇排序等多種排序方式,這裡我們就不做介紹了,下面開始今天介紹的重點,二叉樹。
####二叉樹 首先說起二叉樹先看一下的基本介紹吧。
- 二叉樹的基本介紹
- 二叉樹的分類
- 先序遍歷
-
中序遍歷 面對同樣的二叉樹,如果我們選用不同的遍歷方式,得到的結果也會不同,同樣對上圖我們選擇中序遍歷,原則:中序是先訪問左子樹,再根結點,再右子樹 因此我們得到的結果是:H,D,I,B,J,E,K,A,F,C,G
-
後續遍歷 後續遍歷的原則是:遍歷左(右)子樹,再後序遍歷右(左)子樹,最後訪問根 得到的結果:H,I,D,J,K,E,B,F,G,C,A
-
層次遍歷 層次遍歷的原則是:從上到下從左到右 得到的結果:A,B,C,D,E,F,G,H,I,J,K
###後記 今天就說這麼多吧,如果以後有時間的話再寫一寫別的,所有的幸運都來自努力,iOS開發中還有太多需要學的,以上有說的不當的地方,歡迎指出。