最近在忙著找工作伪冰,所以準(zhǔn)備總結(jié)一下一下面試中經(jīng)常用的算法。雖然自己在下面也經(jīng)常研究算法的東西哄芜。但是好記性不如爛筆頭貌亭,還是寫篇博文記錄一下吧。
今天首先跟大家說的是排序认臊,因?yàn)槲覀€(gè)人現(xiàn)在做iOS開發(fā)圃庭,對(duì)于算法也慢慢成為了我個(gè)人的一個(gè)愛好,當(dāng)然我仍然會(huì)很用心的更新這一塊的內(nèi)容失晴,希望對(duì)大家有所幫助
冒泡排序
英文名字:Bubble Sort剧腻。他的原理就是重復(fù)的走訪要排序的數(shù)列,一次比較兩個(gè)元素师坎,如果他們的順序是錯(cuò)誤的恕酸,就把他們交換過來。走訪數(shù)列的工作是重復(fù)進(jìn)行的胯陋,直到?jīng)]有需要的交換為止蕊温,這個(gè)時(shí)候就說明數(shù)列已經(jīng)排序完成袱箱。這個(gè)算法名字由來是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端。
冒泡排序的過程:
1.比較兩個(gè)相鄰的元素义矛。如果第一個(gè)比第二個(gè)大就交換它們兩個(gè)
2.對(duì)每一對(duì)相鄰元素做同樣的工作发笔,從開始的第一對(duì)到結(jié)尾的最后一對(duì)。這步完成之后凉翻,最后的元素會(huì)是最大的數(shù)
3.針對(duì)所有的重復(fù)以上的步驟了讨,除了最后一個(gè)
4.持續(xù)每次對(duì)越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何的一對(duì)數(shù)字需要比較
實(shí)現(xiàn)代碼:(這里只給出C語言的實(shí)現(xiàn)代碼)
void bubble_sort (int arr[], int length)
{
int i, j, temp;
for (i = 0; i < length; i++)
for (j = 0; j < len - 1 - i; j++)
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = arr[j];
}
}
選擇排序
英文名字:Selection Sort制轰,是一種簡(jiǎn)單直觀的排序算法前计。他的工作原理如下。首先在未排序數(shù)列中找到最欣取(大)元素男杈,存放到排序序列的起始位置,然后调俘,再?gòu)氖S嗟奈磁判蛟刂袑ふ易钚伶棒。ù螅┰兀缓蠓诺揭雅判蛐蛄械哪┪膊士狻R源祟愅品粑蓿钡剿械脑鼐帕型戤叀?br>
排序過程:
1.依次比較數(shù)列中的每一個(gè)數(shù),找出其中的最大值
2.交換最大值第一個(gè)數(shù)的位置
3.對(duì)剩余的數(shù)重復(fù)上述的步驟骇钦,直到剩余數(shù)的個(gè)數(shù)為0
實(shí)現(xiàn)代碼:
void selection_sort(int arr[], int len)
{
int i, j, min, temp;
for (i = 0; i < len; i++)
{
min = i;
for (j = i + 1; j < len; j++)
{
if (arr[min] > arr[j])
min = j;
}
temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}