20162321王彪 2017-2018-1 《程序设计与数据结构》第三周学习总结
查找與排序
1.教材知識點總結(jié)
- 查找是在一組項內(nèi)找到指定目標(biāo)或是確定目標(biāo)不存在的過程。
- 高效的查找是的比較的次數(shù)最少。
- Comparable接口允許多態(tài)實現(xiàn)算法,而不是只應(yīng)用于特定的類。
- 二分查找利用了查找池有序的這個特性。
- 二分查找的每次比較都排除樂一半的可行候選數(shù)據(jù)。
- 排序是按某種標(biāo)準(zhǔn)將一列數(shù)據(jù)項按確定的次序重排的過程。
- 選擇排序算法反復(fù)地將一個個地具體的值插入到表的已有序的子表中,從而完成一組值的排序。
- 冒泡排序算法反復(fù)地比較相鄰元素,如果必要就交換他們的次序,從而完成一組值的排序。
- 快速排序算法通過劃分表,然后再遞歸地對兩個子表進(jìn)行排序,從而完成一組值的排序。
- 歸并排序算法遞歸地將表平分為兩部分,知道每個子表中只含有一個元素,然后將這些子表歸并為有序段,從而完成一組值的排序。
- 二分查找有對數(shù)階的復(fù)雜度,對于大的查找池來說,這非常有效率。
- 選擇排序、插入排序及冒泡排序的平均時間復(fù)雜度是O(n2)。
- 快速排序的關(guān)鍵是選擇一個好的劃分元素。
- 歸并排序的最壞運(yùn)行時間復(fù)雜度是O(nlogn).
2.線性查找
關(guān)鍵代碼理解
public static Comparable linearSearch (Comparable[] data,Comparable target){Comparable result = null;int index =0;while(result == null&&index <data.length){if(data[index].compareTo(target)==0)result =data[index];index++;}return result}...Contact found = (Contact)Searching.linearSearch(player,target);- linearSearch方法的參數(shù)和返回值類型都是Comparable對象,但實際我們確是用著個方法來查找的是Contact對象。這是多態(tài)性能的一個例子。任何實現(xiàn)Comparable接口的類的對象都可賦予指向Comparable對象的引用,什么意思?
書中P259:在聲明對象引用變量時,可以使用類名作為類型。同樣,接口名也可用作引用變量的類型。接口引用變量可用來指向?qū)崿F(xiàn)該接口的任意類的任何對象
public interface wang{public void speak();}//可以用接口名wang來聲明一個對象引用變量wang biao;//引用變量biao可以指向?qū)崿F(xiàn)wang接口的任意類的任何對象。//假定有個類student實現(xiàn)類接口wangbiao = new student();本例中contact類實現(xiàn)了接口Comparable,所以在代碼中出現(xiàn)了```Contact found = (Contact)Searching.linearSearch(players,target);
while循環(huán)data數(shù)組中的元素,每次循環(huán),data數(shù)組的一個元素都會和target進(jìn)行比較,而比較的方法在實現(xiàn)Comparable接口的類Contact已經(jīng)重寫.最后返回一個Conparable對象。
線性性查找不要求查找池中的元素按某種特定的次序保存在數(shù)組中。但必須能基于Comparable的實現(xiàn),按順序一次檢查一個值,所以查找的效率不高。
3.二分查找
關(guān)鍵代碼
- 二分查找在數(shù)學(xué)中的使用很多,比如用來開根號等。而實現(xiàn)二分查找的代碼就是實現(xiàn)數(shù)學(xué)的二分法過程
- 試?yán)?/li>
- 課堂代碼
- 代碼本身沒難度,關(guān)鍵在于每次比較和會改變可行候選者的位置,如果中間值小于查找值,則last變化為mid-1;如果中間值大于查找值,則說明查找值不在中間值為界的前半?yún)^(qū),所有first變化為mid+1.
4.排序元素
- 選擇排序算法的一般策略是:掃描整個表,找到最小值。將這個值與表中的第一個位置的值相交換。接著掃描除了第一個元素之外的所有值,找的最小值,與表中的第二個位置交換,循環(huán)上述步驟,交換的三,四...個元素直到排序完成。
- 插入排序算法的一般策略是:對表中最前面的兩個元素進(jìn)行排序,如果有必要就進(jìn)行交換,將表中的第三個值插入到前兩個(已有序)值組成的子段中的合適位置。接下來將第四個值插入到前三個值的合適位置...
- 冒泡排序
- 快速排序
- 歸并排序
5.結(jié)對編程
這周的Java課上有了一次實驗,較簡單,但沒做出來,這是最尷尬的。課下和結(jié)對編程伙伴兩人用他的電腦花了一點時間再次做了這個實驗。過程中感覺的伙伴的編程能力還需要提高,雖然自己也強(qiáng)不到哪里去0.0,使用一臺電腦,兩人一起編,雖然我說的比較多,但效果還湊合......本來以為這次實驗和實驗博客就差不多完工0.0,伙伴的電腦燒了,0.0
這周課上表現(xiàn)很是不好,感覺一些編程能力有了下滑,一些知識點不牢固,IDEA的junit調(diào)試被自己弄出了問題,總之還需努力。
轉(zhuǎn)載于:https://www.cnblogs.com/wbiao21/p/7588022.html
總結(jié)
以上是生活随笔為你收集整理的20162321王彪 2017-2018-1 《程序设计与数据结构》第三周学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原创:真正的狄仁杰与小说中的狄仁杰一样吗
- 下一篇: 原创:陈士榘手下3个军长,比兵团参谋长还