? ? ? ? 本周開始重新拾起算法,每天兩到三道題占婉。本周主要練習(xí)的是二分查找和雙指針。
二分查找:
????????二分查找也稱折半查找甫恩,它是一種效率較高的查找方法锐涯。但是,折半查找要求線性表必須采用順序存儲(chǔ)結(jié)構(gòu)填物,而且表中元素按關(guān)鍵字有序排列。
查找過程:
????????首先霎终,假設(shè)表中元素是按升序排列滞磺,將表中間位置記錄的關(guān)鍵字與查找關(guān)鍵字比較,如果兩者相等莱褒,則查找成功击困;否則利用中間位置記錄將表分成前、后兩個(gè)子表广凸,如果中間位置記錄的關(guān)鍵字大于查找關(guān)鍵字阅茶,則進(jìn)一步查找前一子表,否則進(jìn)一步查找后一子表谅海。重復(fù)以上過程脸哀,直到找到滿足條件的記錄,使查找成功扭吁,或直到子表不存在為止撞蜂,此時(shí)查找不成功。
雙指針:
????????指的是在遍歷對(duì)象的過程中侥袜,不是普通的使用單個(gè)指針進(jìn)行訪問蝌诡,而是使用兩個(gè)相同方向(快慢指針)或者相反方向(對(duì)撞指針)的指針進(jìn)行掃描,從而達(dá)到相應(yīng)的目的枫吧。
對(duì)撞指針:
? ? ? ? 分別在最左段和最右端設(shè)置左右兩個(gè)指針浦旱,讓后讓兩個(gè)指針都向中間移動(dòng),從而達(dá)到程序的目的九杂。
快慢指針:
? ? ? ? 兩個(gè)指針向同一方向移動(dòng)颁湖,不過一個(gè)在前宣蠕,一個(gè)在后。指針移動(dòng)速度可以不同爷狈。