主题Sorting(排序).pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
主题Sorting(排序)

主題: Sorting (排序) 解題技巧 什麼是 sorting? 基本的 sorting 方法 如何使用 qsort 例題講解: A.299 歷年題目 什麼是 sorting? 將給定的資料按照特定的順序排列好 由小到大 由大到小 例: 1, 7, 9, 5, 3 由小到大:1, 3, 5, 7, 9 由大到小:9, 7, 5, 3, 1 什麼是 sorting? 只有數字能比大小嗎? John ? Bob 小明 ? 小華 只要能定義大小關係,就可以 sort J 在 B 之後 ? John Bob “明”筆畫比“華”少 ? 小明 小華 常見的 sorting 演算法 bubble sort merge sort quick sort heap sort integer sort Bubble sort 原理 就像氣泡會往上浮一樣,小的數字必須要往前進,而大的數字就必須往後退 每次比較相鄰的兩個數字,然後將小的放在前面的位置,而大的放在後面的位置 Example swap 方法 1: 寫一個 swap 的 function,每次需要的時侯就可以 call 來用 注意不能直接傳值進去 swap example: 將兩個整數互換 swap 方法 2: 利用 #define 定義 swap 變數要記得宣告 swap example: 將兩個整數互換 C code for ( i = 0 ; i = n – 1 ; i++ ) for ( j = 0 ; j = n – 2 ; j++) if ( num[ j ] num[ j + 1] ) swap(num[ j ] , num[ j + 1]); Stable sort 若是要 sort 的東西之中有大小相同的,如果 sort 完之後大小相同的排法是依照兩個東西 input 的順序排列的話,稱為 stable sort,如果不保證一定按照 input 的順序排的話,稱為 non-stable sort input: 3 5 2 1 3 4 stable sort: 1 2 3 3 4 5 Parallel array 有時後在寫程式時為了方便起見會開幾個陣列來儲存而不是用 structure,這時如果按其中一個 array 的值來 sort 的話,要記得所有的 array 都要跟著做一樣的動作 例: a[i] 代表身高,b[i] 代表體重,現在想按照身高來做 sort,則 b[i] 也應該做相對應的變動才能夠讓 a[i] 和 b[i] 代表同一個人的身高體重 在 swap(a[i], a[j]) 時也應該做 swap(b[i], b[j])的動作 qsort C 內建的 sort function,一般來說比用 bubble sort 來的快。 需要自己寫一個 compare function Example: qsort Example: qsort Example: qsort #include stdio.h int num[5] = {1, 7, 9, 5, 3 }; int comp_func(const void *a, const void *b){ int c, d; c = *(int *)(a); d = *(int *)(b); return ( c – d ); } int main(void){ qsort(num, sizeof(num)/sizeof(num[0]), sizeof(num[0]), comp_func); /* qsort(num, 5, sizeof(num[0]), comp_func); */ return 0; } qsort and bubble sort bubble sort 執行速度較慢 程式好寫好記,不容易忘 qsort 執行速度較快 需要自己寫 compare function 不熟的話容易忘記格式 例題講解: A.299 (http://acm.uva.es/p/v2/299.html) 有一列火車總共有 L 節車廂,每節車廂都有個編號(從 1 ~ L)。現在車廂的順序亂掉了,而站長希望能把車廂的順序由 1 到 L 排好。唯一能做的方法是把相鄰的兩個車廂順序對調,請問,最少需要做幾次的車廂順序對調工作,而能讓車廂的順序由 1 到 L 排好。 L 最大到 50 Sample input/output Sample input: 3 3 1 3 2 4 4 3 2 1 2 2 1 Sample output: Optimal train swapping takes 1

文档评论(0)

jiayou118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档