日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

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

查找與排序

1.教材知識點總結

  • 查找是在一組項內找到指定目標或是確定目標不存在的過程。
  • 高效的查找是的比較的次數最少。
  • Comparable接口允許多態實現算法,而不是只應用于特定的類。
  • 二分查找利用了查找池有序的這個特性。
  • 二分查找的每次比較都排除樂一半的可行候選數據。
  • 排序是按某種標準將一列數據項按確定的次序重排的過程。
  • 選擇排序算法反復地將一個個地具體的值插入到表的已有序的子表中,從而完成一組值的排序。
  • 冒泡排序算法反復地比較相鄰元素,如果必要就交換他們的次序,從而完成一組值的排序。
  • 快速排序算法通過劃分表,然后再遞歸地對兩個子表進行排序,從而完成一組值的排序。
  • 歸并排序算法遞歸地將表平分為兩部分,知道每個子表中只含有一個元素,然后將這些子表歸并為有序段,從而完成一組值的排序。
  • 二分查找有對數階的復雜度,對于大的查找池來說,這非常有效率。
  • 選擇排序、插入排序及冒泡排序的平均時間復雜度是O(n2)。
  • 快速排序的關鍵是選擇一個好的劃分元素。
  • 歸并排序的最壞運行時間復雜度是O(nlogn).

2.線性查找

關鍵代碼理解

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方法的參數和返回值類型都是Comparable對象,但實際我們確是用著個方法來查找的是Contact對象。這是多態性能的一個例子。任何實現Comparable接口的類的對象都可賦予指向Comparable對象的引用,什么意思?

書中P259:在聲明對象引用變量時,可以使用類名作為類型。同樣,接口名也可用作引用變量的類型。接口引用變量可用來指向實現該接口的任意類的任何對象

public interface wang{public void speak();}//可以用接口名wang來聲明一個對象引用變量wang biao;//引用變量biao可以指向實現wang接口的任意類的任何對象。//假定有個類student實現類接口wangbiao = new student();
  • 本例中contact類實現了接口Comparable,所以在代碼中出現了```Contact found = (Contact)Searching.linearSearch(players,target);

  • while循環data數組中的元素,每次循環,data數組的一個元素都會和target進行比較,而比較的方法在實現Comparable接口的類Contact已經重寫.最后返回一個Conparable對象。

  • 線性性查找不要求查找池中的元素按某種特定的次序保存在數組中。但必須能基于Comparable的實現,按順序一次檢查一個值,所以查找的效率不高。

3.二分查找

關鍵代碼

  • 二分查找在數學中的使用很多,比如用來開根號等。而實現二分查找的代碼就是實現數學的二分法過程
  • 試例
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;}
  • 代碼本身沒難度,關鍵在于每次比較和會改變可行候選者的位置,如果中間值小于查找值,則last變化為mid-1;如果中間值大于查找值,則說明查找值不在中間值為界的前半區,所有first變化為mid+1.

4.排序元素

  • 選擇排序算法的一般策略是:掃描整個表,找到最小值。將這個值與表中的第一個位置的值相交換。接著掃描除了第一個元素之外的所有值,找的最小值,與表中的第二個位置交換,循環上述步驟,交換的三,四...個元素直到排序完成。
  • 插入排序算法的一般策略是:對表中最前面的兩個元素進行排序,如果有必要就進行交換,將表中的第三個值插入到前兩個(已有序)值組成的子段中的合適位置。接下來將第四個值插入到前三個值的合適位置...
  • 冒泡排序
  • 快速排序
  • 歸并排序

5.結對編程

  • 這周的Java課上有了一次實驗,較簡單,但沒做出來,這是最尷尬的。課下和結對編程伙伴兩人用他的電腦花了一點時間再次做了這個實驗。過程中感覺的伙伴的編程能力還需要提高,雖然自己也強不到哪里去0.0,使用一臺電腦,兩人一起編,雖然我說的比較多,但效果還湊合......本來以為這次實驗和實驗博客就差不多完工0.0,伙伴的電腦燒了,0.0

  • 這周課上表現很是不好,感覺一些編程能力有了下滑,一些知識點不牢固,IDEA的junit調試被自己弄出了問題,總之還需努力。

轉載于:https://www.cnblogs.com/wbiao21/p/7588022.html

總結

以上是生活随笔為你收集整理的20162321王彪 2017-2018-1 《程序设计与数据结构》第三周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。