¡ÒèѴàÃÕ§Ẻá·Ã¡
( Insertion sort )
¤×Í ¡ÒèѴàÃÕ§¢éÍÁÙÅâ´Â¹Ó¢éÍÁÙÅ·Õè¨Ð·Ó¡ÒèѴàÃÕ§¹Ñé¹
æ ä»á·Ã¡äÇéã¹¢éÍÁÙÅ·ÕèÁÕ¡ÒèѴàÃÕ§àÃÕºÃéÍÂáÅéÇ
³ µÓá˹觷Õè¶Ù¡µéͧ
´Ñ§¹Õé¤×Í
¶éÒÊÁÁµÔÇèÒÁÕÍÒÃìàÃÂì
[A] «Öè§ÁÕ¢éÍÁÙÅ
N µÑÇ A[1] , A[2] , A[3] , ... , A[N] ã¹Ë¹èǤÇÒÁ¨Ó
ÇÔ¸Õ¡Ò÷ӧҹ¢Í§¡ÒèѴàÃÕ§Ẻá·Ã¡
¡ç¤×Í scan array [N] A[1] ¨Ò¡
A[N] áÅзӡÒÃÃá·Ã¡áµèÅТéÍÁÙÅ
A[K] ã¹ subarray ·ÕèÁÕ¡ÒèѴàÃÕ§¢éÍÁÙÅàÃÕºÃéÍÂáÅéÇ
A[1] , A[2] , A[3] , ... , A[K-1] ³ µÓá˹觷Õè¶Ù¡µéͧ
¡Ò÷ÕèàÃÒ¨Ðá·Ã¡
A[K] ã¹µÓá˹觷Õè¶Ù¡µéͧ¢Í§
subarray ·Õè¶Ù¡¨Ñ´àÃÕ§ÅӴѺäÇéáÅéǹÑé¹
àÃÒµéͧà»ÃÕºà·Õº
A[K] ¡Ñº A[K-1] , A[K] ¡Ñº A[K-2] ,
A[K-3] ä»àÃ×èÍ æ
¨¹¡ÃзÑè§¾º¢éÍÁÙÅ
A[J] µÑ§áá·Õè
A[J] <= A[K] áÅéÇ¢éÍÁÙŵÓá˹è§
A[K-1] , A[K-3] , ... , A[J+1] ¨Ð¶Ù¡·Ó¡ÒÃàÅ×è͹仢éҧ˹éÒ
1 µÓá˹è§áÅéÇ
A[K] ¨Ð¶Ù¡á·Ã¡ã¹µÓá˹觷Õè
J+1 ááã¹ÍÒÃìàÃÂì
µÑÇÍÂèÒ§¡Ò÷ӡÒâͧ
Insertion sort
ÊÁÁµÔãËéÁÕµÑÇàÅ¢ÍÂÙè
10 µÑÇ ¤×Í ( 9
6 1 7 8 4 2 3 5 10 )
¡Òà sort Ẻ Insertion ¤×Í
1. ¨Ñº¤Ùè A[L] ¡Ñº
A[L+1] ¡è͹ áÅéǹӵÑÇàÅ¢
2 µÑÇÁÒà»ÃÕºà·Õº¡Ñ¹
ãËéµÑÇàÅ¢·ÕèÁÕ¤èÒ¹éÍ¡ÇèÒä»ÍÂÙè˹éÒ
( àÁ×èÍ L=1 )
ªØ´µÑÇàÅ¢à´ÔÁ
9 6 1 7 8 4 2 3 5 10
ËÅѧ¨Ò¡¼èÒ¹¡Ãкǹ¡ÒâéÍ1
áÅéÇ¡ÒÃàÃÕ§µÑÇàÅ¢ãËÁè¨Ðà»ç¹
6 9 1 7 8 4 2 3 5 10
2. àÁ×èÍ L = 2 ¡ÒèѺ¤Ùè¨Ð¡ÅÒÂà»ç¹
A(2) ¡Ñº A(3) áÅéÇà»ÃÕºà·Õº¡Ñ¹ÍÕ¡
µÑÇàÅ¢ªØ´ä˹¹éÍ¡ÇèÒàÍÒ¢Öé¹Ë¹éÒ
´Ñ§¹Ñ鹨ҡµÑÇàÅ¢ªØ´º¹àÁ×èͼèÒ¹¡Ãкǹ¡ÒâéÍ
2 ¨Ðà»ç¹
6 1 9 7 8 4 2 3 5 10
3. áÅéǤèÒ
L ¨Ðà·èҡѺ 1 ÍÕ¡
¡ÒèѺ¤Ùè¨Ð¡ÅÒÂà»ç¹
A(1) ¡Ñº A(2) (6 , 1) ¡çàªè¹à´ÕÂǡѹãËé¹ÓµÑÇàÅ¢·ÕèÁÕ¤èÒ¹éÍ¢Öé¹Ë¹éÒ
´Ñ§¹Ñé¹ËÅѧ¨Ò¡¼èÒ¹¢éÍáÅéÇ
¢éÍÁÙŨСÅÒÂà»ç¹
1 6 9 7 8 4 2 3 5 10
¢éÍÁÙÅ㹪èǧ¹Õé
A(1) ¶Ö§ A(3) àÃÕ§¡Ñ¹áÅéÇ
4. ¤ÃÒǹÕéàÁ×èÍàÃÕ§
3 µÑÇàÊÃç¨áÅéÇ
¤èÒ L ¨Ðà·èҡѺ
3 µÑÇ·Õè¨Ðµéͧ¹ÓÁҨѺ¤Ùè¤×Í
A(3) ¡Ñº A(4) (9 ¡Ñº 7) áÅéǹÓÁÒà»ÃÕºà·Õº¡Ñ¹àªè¹·Ø¡¢éÍ
1 6 7 9 8 4 2 3 5 10
5. áÅéǤèҢͧ
L ¨Ðà·èҡѺ 2 ¨Ñº¤Ùè
A(2) ¡Ñº A(3) ã¹·Õè¹Õé¤×Í
6 ¡Ñº 7 áÅéÇà»ÃÕºà·ÕºàÍÒµÑǹéÍÂäÇé˹éÒ
¨Ò¡¹Ñé¹ L ¡ç¨Ðà·èҡѺ
1 ¨Ñº¤Ùè A(1) áÅÐ
A(2) (1 ¡Ñº 6) à»ÃÕºà·Õº¡Ñ¹
àÁ×èÍÁÒ¶Ö§¢Ñé¹¹Õé
A(1) ¶Ö§ A(4) ¨ÐàÃÕ§¨Ò¡¹éÍÂä»ÁÒ¡áÅéÇ
´Ñ§¹Õé
1 6 7 9 8 4 2 3 5 10
6. àÁ×èÍ
L = 4 à»ÃÕºà·Õº
A(4) ¡Ñº A(5)
1 6 7 8 9 4 2 3 5 10
7. ¡ÅѺ价Ӵѧ¢éÍ
3 ËÃ×Í 6 àÃ×èÍÂ
æ 仨¹¡ÃзÑè§
L = 9 ¢éÍÁÙÅ·Õèä´é¨ÐàÃÕ§ÅӴѺ¡Ñ¹´Ñ§¹Õé
1 2 3 4 5 6 7 8 9 10
µÑÇÍÂèÒ§
source code
Insertion sort