這麼簡單的插入排序,都可以優化,還有什麼是不可以優化的。最讓我驚訝的是,當多次呼叫乙個函式的時候,函式的呼叫開銷是不可忽略的。正如測試結果所示:
#include#define max 1000000 void swap( int *data, int i, int j) //未經過優化的插入排序,簡單直觀 void insertsort1( int *data, int n) //第一級優化的插入排序,將swap呼叫移到函式內部 void insertsort2( int *data, int n) } //第二級優化的插入排序,注意到每次交換data[j - 1] , data[j],中間有多餘的操作 void insertsort3( int *data, int n) } int main()
結果:time of insertsort1 test is : 20470ms
time of insertsort2 test is : 13720ms
time of insertsort3 test is : 8300ms
程式設計珠璣讀書筆記 插入排序
這麼簡單的插入排序,都可以優化,還有什麼是不可以優化的。最讓我驚訝的是,當多次呼叫乙個函式的時候,函式的呼叫開銷是不可忽略的。正如測試結果所示 include define max 1000000 void swap int data,int i,int j 未經過優化的插入排序,簡單直觀 void...
插入排序 《程式設計珠璣》
插入排序法 插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度 為o n 2 是穩定的排序方法。插入演算法把要排序的 陣列分成兩部分 第一部分包含了這個陣列的所有元素,但將最後乙個元素除外,而第二部分就只包含這乙...
《程式設計珠璣》 讀書筆記
程式設計珠璣 讀書筆記 婁雨禛pb16060356 準確的問題描述 很多時候,我們總是過度關注了解決問題所用的巧妙演算法,而將問題本身的重要性忽視。當我們拿到乙個問題時,應當反覆研讀問題的每乙個細節,因為正是這些細節的細微偏差導致了我們在解決問題時方案與技巧的重大不同。如果我們只花很少的時間研讀問題...