插入排序
- step1:假设数组 a r r a y [ 0 ] , a r r a y [ 1 ] , ⋯   , a r r a y [ j − 1 ] array[0],array[1],\cdots,array[j-1] array[0],array[1],⋯,array[j−1]已从小到大排好序;
- step2:令
k
e
y
=
a
r
r
a
y
[
j
]
,
j
=
1
,
2
,
3
,
⋯
 
,
key=array[j],j=1,2,3,\cdots,
key=array[j],j=1,2,3,⋯,
i
=
j
−
1
,
j
−
2
,
⋯
 
,
1
,
0
i=j-1,j-2,\cdots,1,0
i=j−1,j−2,⋯,1,0,比较
k
e
y
key
key和
a
r
r
a
y
[
i
]
array[i]
array[i]的大小;
i f k e y > a r r a y [ i ] if~~~~key >array[i] if key>array[i] 那么我们直接将 a r r a y [ j ] array[j] array[j]插入到 a r r a y [ j ] array[j] array[j],这样 a r r a y [ 0 ] , a r r a y [ 1 ] , ⋯   , a r r a y [ j − 1 ] , a r r a y [ j ] array[0],array[1],\cdots,array[j-1],array[j] array[0],array[1],⋯,array[j−1],array[j]就已全部排好序;
e l s e else~~~ else 那么我们就逐个比较 k e y , a r r a y [ i ] , i = j − 1 , j − 2 , . . . 0 key,array[i],i=j-1,j-2,...0 key,array[i],i=j−1,j−2,...0每比较一次,将 a r r a y [ i ] array[i] array[i]后移一位。直到 k e y key key放到合适的位置。
下面直接看C代码
void InsertSort(double* array,int used_number)
{
for(int i = 1;i<used_number;i++)
{
double key = array[i];
int j = i-1;
while(j>=0&&array[j]>key)
{
array[j+1]=array[j];
j=j-1;
}
array[i+1] = key;
}
}