原创 第八章——線性時間排序

     這章剛開始證明了基於比較的排序的算法在最壞情況下,都需要做nlgn次比較。 由此可以推出合併排序快速排序都是漸進最優的比較排序算法。 線性時間排序: 1.計數排序 計數排序假設N個輸入元素中的每一個都是介於0~k之間的整數,

原创 給定一個任意的10進制數N,從1開始到N,計算所有數中1出現的次數

首先可以對分別對1位數,2位數,3位數,每一位出現1的個數,分別尋找規律,通過仔細查看可以看到,每位1的個數與當前位上的數有關係,並且與他高位的數有關係,低位的數也有關係。 具體如下:    假設N(個,十,百,千……)位上的數字爲0

原创 已知二叉樹的先序和中序遍歷,求後序遍歷及二叉樹

遇到這個問題自己,沒有合適的方法就搜了下,記錄下這個方法可以快速解決這個問題: 假設給定一個二叉樹的先序遍歷爲A,B,D,E,G,C,F,H,I,J,中序遍歷結果爲D,B,G,E,A,H,F,I,J,C 求其後序遍歷,並畫出

原创 編程之美——發帖水王

問題是,在論壇上一個人非常喜歡發帖,且他發的帖子數目超過了帖子總數的一半,要想快速的找出這個ID,怎麼辦?  首先可以先把所有帖子按ID進行排序,把排序結果存進數組裏面,然後直接索引N/2即可得到那個ID。時間複雜度是n*logn.

原创 C語言三角函數使用時注意用的是弧度而不是角度

這次做開發用C語言寫三角函數時,通過反三角函數一直得到的角度是0,原來C語言這裏使用的是弧度而不是角度             角度轉弧度: 360°=2π 記錄下來,防止再犯

原创 第七章--快速排序

 快速排序也是基於分治策略的,每步確定一個元素把他放到合適的位置,使它之前的都小於他使它之後的都大於它,然後繼續對其進行遞歸調用,當最後只有一個元素時就是有序的: 實現代碼: // quickSort.cpp : 定義控制檯應用程序的入

原创 短語、直接短語、句柄、素短語

短語、直接短語、句柄、素短語、 以此爲例子: 先畫出語法樹,例:                S        /       |        \      (         T         )         

原创 第六章--堆排序

首先是構造最大堆(最小堆,排序結果剛好相反具體有一些改動)書中證明了從第N/2開始即可構造出最大堆void max_heap(int a[],int i) { int l=2*i+1,r=2*i+2,largest; if(l<=h