原理分析(升序)
假定数组第一个数是有序的,从数组下标1开始遍历比较后面的数值。如果遍历到的数x小于排在它前面的数则交换他们,再比较x和x前面的数…直到x前面再也没有比它大的数了,这时x就移动到了有序队列的合适位置。上述比较称为插入。
《算法导论》里的比喻很合适:“插入排序就像玩扑克牌时的抓牌一样,抓一张牌,就把它插在已有扑克牌的合适位置”
注:从数组的第二个数(下标1)开始遍历就是假设第一个数已经是有序队列了。后面通过遍历逐渐增加有序队列长度。直到完成排序。
void sort3(int arr[],int length)
{
int i , j ;
//定义i为数组下标,从下标1开始遍历
for(i = 1; i < length; i++)
{
for(j = i; j >= 0; j--)
{
//判断,if成立就交换数值,不成立则表示已经在合适位置了,直接break
if(arr[j-1] > arr[j])
{
int a = arr[j-1];
arr[j-1] = arr[j];
arr[j] = a;
}
else
{
break;
}
}
}
}