原创 第八章——線性時間排序
這章剛開始證明了基於比較的排序的算法在最壞情況下,都需要做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