6 @, H& M, L m, N, Q; U$ g( K& `+ m: Z$ T7 F
也就是说要将整个原序列排好序的话要让已排序序列拓展至整个原序列,也就是end要不断增加到size - 1(size是数组元素个数),end值为size - 1时结束,所以还要外套一个循环。; A7 W; R4 W1 F% `5 n- h
8 i6 I; Z/ S/ t+ ?* jvoid InsertSort(int* arr, int sz): b) d, M& } @. i# D( P
{ 0 T8 g N% V# B( i9 Y0 H6 N assert(arr);, H. p, I5 a8 K: A( W
" A: ]: i( m/ p; v" ^$ Q
for (int i = 0; i < sz - 1; ++i)//i的取值就是end的取值,end最多取到sz-2算有效,当它取到sz-1时就该结束循环了 ( l# _1 E( L, b6 W" |: h% q8 E {4 }' H2 c% _+ G5 z
//单轮排序1 ?: Z6 [9 `, x8 k4 w( k3 P! X
int end = i;6 r3 o: Y+ z: [( {
int tmp = arr[end + 1];$ n5 f# ^$ k+ P! Q5 }( S$ o* {( \, |1 a
while (end >= 0)//为什么要>=0呢?可不可以>0? 9 U2 j/ ]" L: d" w { + q! m; {* A7 T5 T //要排升序 : B8 [/ `% t8 Z& I5 w9 n# X, I if (tmp < arr[end]) ! |7 v4 S0 d4 J( p% ~ {% F s- G3 ]# r4 A* R3 d
arr[end + 1] = arr[end]; M# Q+ V9 y% z7 ~6 s( K --end;3 r0 j b4 l6 ^* q- [# s
} 8 v; r! x; k9 x else( e- T3 }" ?, N4 i5 d& X' e
{ ' n' I3 x" ^5 q9 [' j
break;2 o& O, ?+ v! r! B3 S/ x/ i
} + o% w: P5 Q* I) @
} . j8 i* K2 |6 j; L4 r arr[end + 1] = tmp; 1 ~: U& e4 {, M4 Y. z: o } 6 L2 }1 z4 O6 G! U; S; T} , s2 T+ V! I/ A9 t% E7 m3 H5 E' W7 {0 F! j
1 1 [1 H1 N; ^: T; Z# \: W23 E2 }0 f1 I! G6 O3 K( |
3 / v+ {% ~) h) T4 1 s* Q6 B; }6 S$ [8 C& q* L% b5 " A! Y1 v6 V+ e% `& e! |6 1 _4 r3 N4 L2 l' P7! R4 |' W5 y- n
8 $ I3 \& z) ^6 Q6 P7 k, b9- n9 v3 D5 U& i1 _2 b
10. P- V+ m8 u( U2 e+ X
11! g/ j7 |1 I7 C5 U. g, }8 z( m& B
12 / O" Q; ]) ?: F: D135 O2 J/ ?, q4 G/ l( I
14" {3 C% h" i( O- Z5 W8 _( [
15 S3 X. w' U+ u& ]
16+ }' B' I, b; x D
179 a. Q3 d$ ?$ g* ?. H
180 V% Z& {8 n# S7 b
19* r: `& N; d: e/ _5 [2 g( @
20 ; Z) \% p# g! z* D1 B* V: y215 W' u% L3 E: S J* [+ b7 p
22 4 d4 l; O# X" X3 B$ R. u23; M. ^3 a7 v- k
24 5 `& [. r$ \8 `253 X$ M6 z ^( d% ~9 p
end可以为0,因为有可能tmp的值比arr[0]还小,那就得让原来的arr[0]后移,把tmp放到arr[0]的位置。 4 h. N' W* P4 b% i3 f4 Z5 A% J- x4 m! M0 [