日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

20162321王彪 2017-2018-1 《程序设计与数据结构》第三周学习总结

發(fā)布時間:2025/3/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 20162321王彪 2017-2018-1 《程序设计与数据结构》第三周学习总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

查找與排序

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>
public class Binary {public float answer(int item){float first = getnum(item);float last = first+1;float mid = (first+last)/2;float firsts = first*first;float lasts = last*last;float mids = mid*mid;for (int i=0;i<4;i++){if (mids>item){last = mid;lasts = mids;mid = (first+last)/2;mids = mid*mid;}if (mids<item){first = mid;firsts = first*first;mid = (first+last)/2;mids= mid*mid;}}return mid;}public void testgetnum(int i){System.out.println(getnum(i));} public static int getnum(int item){int num=0;int front=num*num;int after=(num+1)*(num+1);while ((front<item&&after<item)||(front>item&&after>item)){num++;front=num+num;after=(num+1)*(num+1);}return num;}}
  • 課堂代碼
int first =0,last=data.length-1,midwhile(result == null&&first<=last){mid = (first+last) / 2 ;if(data[mid].comparable(target)==0)result = data[mid];elseif(data[mid].compareTo(target)>0)last = mid -1;elsefirst = mid +1;}
  • 代碼本身沒難度,關(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。