線性時間排序(一)C語言

  <<AtA>>上的一道思考題.昨天開始琢磨,今天又琢磨到現在.我承認我腦袋比較迷糊,但也有點慢得讓我接受不了了."不急跬步,無以至千裡;不積小流,無以成江海",只能如此安慰自己了.呵呵.  問題本身就是,給定 N 個數的集合S, S {X | X ∈ S, 0 <= X <= k).恩.書上是1,我這裡出現的是0.多了個數罷了.要求是,修改計數排序,以完成在 O (N + K) 時間完成排序的任務,並且只能使用 O (K) 的儲存空間. 

再散列開放定址散列表(線性探測法)加強版可再散列經最佳化實現檔案C語言

/*open_addressing_hash_with_hashing_again.c -- 開放定址散列表線性探測法可再散列實現檔案*/#include <stdio.h>#include <stdlib.h>#include "open_addressing_hash_with_hashing_again.h"/*局部函式宣告*/static int Get_Prime_Value (const int size) ;static int Is_A_Prime

二項隊列實現檔案C語言

/*binomial-queue.c -- 二項隊列實現檔案*/#include "binomial-queue.h"/*局部函式宣告*/static SubTree Combine_Trees (SubTree t1, SubTree t2) ;static Node * Make_Node (const Item item) ;static void Recursively (const SubTree t, void (* pfun) (const Item item))

盒子樹標頭檔C語言

  兩天時間,白天看虛擬儲存空間,晚上到家寫這個東西,剛剛寫完.缺點不少,功能實現是必須的.  這個東西,是根據習題的要求寫的,關於盒子問題,所以我給它取了個名字--盒子樹.呵呵.  在寫代碼的過程中,我希望寫完之後大肆慶祝下,.可寫完之後,又覺得沒什麼...呵呵  對於這個東西,我解釋下我的分析.  總體要求,就是要求有序.於是我選擇了二叉搜尋樹,考慮過AVL樹,後來覺得新東西,還是先簡單地實現下. 

盒子樹實現檔案C語言

/*box.c -- 盒子問題實現檔案*/#ifndef GENERIC#include "box.h"#endif/*局部函式宣告*/static Box * Make_Box (const Weight capacity) ;static Box * Find_Max (Box * box) ;static Box * Find_Min (Box * box) ;static int Insert_ (BoxTree * const pbt, const Weight capacity,

插入排序C語言

  終於開始接觸排序了.實現可以理解,複雜度的分析對我來說很難./*7-1-11-19-00.01.c -- 第七章第一題*/#include <stdio.h>#include <stdlib.h>#define SIZE 9typedef int Item ;int main (void) ;void insert_sort (Item * array, const int size) ;void print_array (const Item * const

測試幾種常見排序演算法穩定性C語言

  排序的穩定性,是指排序前後,相同元素的位置先後關係是否改變.穩定排序,是位置先後關係不變.不穩定排序,是先後位置關係改變,當然,也存在不改變的可能.更說明了他的不穩定.可笑吧?哈哈...  <<AtA>>的一道課後習題,問了幾種常見排序的穩定性問題,以及如何將不穩定排序改為穩定排序.為了探尋這個問題,我決定動手寫出這些排序.這是昨天的事,昨天開始寫的.到現在寫完了,中途幹了許多別的事情.  還是第一次,默寫這些個排序.收穫很多,可以說,最起碼克服了默寫這些排序的恐懼.

收費公路重建問題(可發現所有同度點集)C語言

  同度點集,就是產生相同的距離集合,但卻是不同點集的那些點集.這個東西,整個白天都在想.到現在,也不是很清楚.但,代碼寫出來了,回溯部分總是不自信的感覺.  核心的思想就是:傳遞給常式一個數組指標,之後用一個 static int 類型變數儲存點集的個數.即每次使集合為空白,就執行 count++ ;  無論是否成功產生點集,都進行回溯.通過對決策樹的分析,在每次調用 place () 結束之後,都通過上一個點集的內容對 distance

希爾排序C語言

/*7-4-11-19-19.58.c -- 第七章第四題*/#include <stdio.h>#include <stdlib.h>#define SIZE 9int main (void) ;void print_array (const int * array, const int size) ;void shell_sort (int * array, const int size) ;int main (void){int array[SIZE] = {9,

計數排序C語言

計數排序,白天手機看維基百科看到的.對付資料跨度小的 int 型資料,的確很快.代碼,很直觀./*count_sort-11-03-21-19.01.c -- 計數排序*/#include <stdio.h>#include <stdlib.h>#define SIZE (10)int main (void) ;int countSort (int * const array, const int size) ;void printResult (const int *

堆排序C語言

/*7-11-11-19-22.12.c -- 第七章第十一題*/#include <stdio.h>#include <stdlib.h>#define LEFTCHILD(position) ((position) * 2 + 1)/*Notice the space*/#define SIZE 12int main (void) ;void print_array (const int * const array, const int size) ;void

尋找第k小的元素C語言

/*7-23-11-23-23.10.c -- 第七章第二十三題*/#include <stdio.h>#include <stdlib.h>#define CUTOFF (3)#define SIZE (40)#define WRONG (-36768)int main (void) ;void print_array (const int * const array, const int size) ;void swap (int * const p1, int *

配合Dijkstra演算法的二元堆積實現檔案C語言

/*binary_heap.c -- 二元堆積實現檔案*/#include <stdio.h>#include <stdlib.h>#include "binary_heap.h"/*局部函式宣告*/static int Percolate_Up (const Binary_Heap * const pbh, const int index) ;static int Percolate_Down (const Binary_Heap * const pbh, const

歸併排序非遞迴實現C語言

  話說這個東西寫到淩晨3點27分,都沒有寫好.剛才睡醒了寫完的.主要遇到的問題就是當數組大小不是2的冪的時候發生的 right_end 越界的時候.我的邏輯起初偏於複雜,後來重新組織邏輯,當發生 right_end 越界的時候, 取 size - 1 為 right_end, 並且保持前一個數組完整, 後一個數組的大小不去顧及. 這樣問題就解決了.  這貌似加深了我對歸併排序的理解./*7-14-11-21-00.21.c -- 第七章第十四題*/#include

確定指定資料範圍內資料個數C語言

  看<<AtA>>,講計數排序後面的一道習題.確實,睾丸之後,耳朵裡面略疼,呵呵.  指定的資料,在 min ~ max 範圍內,確定其中資料在 start ~ end 的資料的個數.因為是計數排序的習題,很自然地想到藉助於計數排序解決,或者,是一部分,或者,是變體.其實,這一部,貌似很難.只不過,在那個時刻,理所當然地想到了.  之後,很快就寫好了.寫好了的時候, min 只能為 0 .

類比電路板布局實現檔案C++

  實現檔案.裡面的細節,關係到輸出的方式.可以選擇多種輸出方式,沒有大肆封裝.//block.cpp -- 類比整合電路板實現檔案#include "stdafx.h"#include "block.h"namespace block{//private:void Test :: m_Merge (const int left, const int leftEnd, const int right, const int rightEnd){int i, j, k ;for (i = left,

快速排序C語言

  就感覺,自己對這些個排序.至少,腦袋裡還沒有.哎,我老是不專心呢.加油吧.  說說快速排序吧.這東西,原理就是不斷地將一個數組分成3部分.保持所有數組處在這種狀態,最終完成排序.  這些思想,還沒有掌握.加油吧,我還能說什麼?  說些這個,呵呵.  這段代碼,起初不懂.後來,隨著不斷手工類比,發現,採用了很多技巧.也難怪起初根本理解不了.自己試著手工按照代碼上的去做,再按照自己的想法做了下,就清晰多了.確實很多技巧. 

二叉搜尋樹最低訪問代價問題C語言

  動態規劃的演算法.  計算出當前二叉搜尋樹構造成最優二叉搜尋樹後的最低訪問代價.雖然還沒有去寫產生最優二叉搜尋樹的常式,但已經很開心了.畢竟,接觸動態規划算法的第三天,寫出了這個,很高興.  希望,並且相信,最近能相繼寫出更多的有關動態規划算法的問題,並且最終遊刃有餘地掌握.  代碼貼出來吧.就不多說了,自覺寫得不錯哦.從分析問題到寫出代碼,用了5小時左右吧./*10-31-11-02-05-20.23.c -- 第十章第三十一題*/#include

隨機數產生器C語言

  這個東西,對於數學上的分析我看明白了90%.但並未做深入研究.這個代碼是抄來的,核心部分是抄來的.感覺不錯.  產生固定的隨機數序列,只要種子一樣的話.這個隨機數產生器比較透明,而且較容易改動.很不錯.  每次實現代碼的時候,都會發現很多問題.而且,一旦寫上了代碼,時光就飛逝了...很不錯.  好吧,帖出來吧.又是來網吧,又是邊下電影邊寫Blog,呵呵.很不錯./*10-35-11-02-08-20.11.c -- 第十章第三十五題*/#include

收費公路重建問題C語言

回溯演算法.話說這東西也是經曆過各種磨難才寫出來的.寫出來之後,就不想再多說些什麼了./*10-40-11-02-16-06.10.c -- 第十章第四十題*//*02-18-01.54 完成.大概用了13小時.*/#include <stdio.h>#include <stdlib.h>#define FALSE (0)#define TRUE (1)typedef int Item ;typedef int BOOL ;/*Data is a kind of

總頁數: 4314 1 .... 1571 1572 1573 1574 1575 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.