插入排序 《程式設計珠璣》

2021-06-21 07:58:10 字數 1351 閱讀 5420

插入排序法

,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的、個數加一的有序資料,演算法適用於少量資料的排序,

時間複雜度

為o(n^2)。是穩定的排序方法。插入演算法把要排序的

陣列分成兩部分:第一部分包含了這個陣列的所有元素,但將最後乙個元素除外,而第二部分就只包含這乙個元素。在第一部分排序後,再把這個最後元素插入到此刻已是有序的第一部分裡的位置。

簡而言之,就是將乙個資料很好的插入已經有序的數列中,當然,依然是遞增或是遞減;

思想:首先第乙個資料肯定是有序的,由第二個資料開始處理,進行插入排序

以上述4個簡單的資料為例,首先預設3是有序的,從第二個資料1開始,插入排序之後為1 3,接下來對第三個資料4進行排序...依次類推:

核心**:

for(int i = 1; i < n; i++)

若是對swap函式不習慣,寫簡單的交換也一樣:

for(int i = 1; i < n; i++)

}

這時我們發現中間可能在進行一些無用的交換,比如上述最後乙個2資料,先將2 4交換,後將2 3交換。其實我們將3 4向後移一位,再將2插入即可,如果資料大浪費的時間更多:

int j;

for(int i = 1; i < n; i++)

作者說上述的時間各有不同,由於本人的資料過小,感覺不到:

順序如上...完整**:

#include #include using namespace std;

void sort(int a, int n)

/*for(int i = 1; i < n; i++) //sort2

}*//*for(int i = 1; i < n; i++) //sort1

*/}void display(int a, int n)

int main()

; int n = sizeof(a) / sizeof(int);

sort(a, n);

display(a, n);

return 0;

}

o(∩_∩)o

程式設計珠璣讀書筆記 插入排序

這麼簡單的插入排序,都可以優化,還有什麼是不可以優化的。最讓我驚訝的是,當多次呼叫乙個函式的時候,函式的呼叫開銷是不可忽略的。正如測試結果所示 include define max 1000000 void swap int data,int i,int j 未經過優化的插入排序,簡單直觀 void...

程式設計珠璣讀書筆記 插入排序

這麼簡單的插入排序,都可以優化,還有什麼是不可以優化的。最讓我驚訝的是,當多次呼叫乙個函式的時候,函式的呼叫開銷是不可忽略的。正如測試結果所示 include define max 1000000 void swap int data,int i,int j 未經過優化的插入排序,簡單直觀 void...

程式設計實現插入排序

插入排序 includevoid insertsort int par array,int array size else break par array j 1 temp int main int len sizeof a sizeof a 0 insertsort a,len for i 0 i...