插入排序的工作方式像许多人排序一手扑克牌。开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较。拿在左手上的牌总是排序好的,原来这些牌是桌子上牌堆中顶部的牌。
插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序 。
void insertsort(int R[], int n)
{
int i, j, t;
for (i = 1;i < n; i++)
{
t = R[i];
if (R[i] < R[i - 1]) {
j = i - 1;
do {
R[j + 1] = R[j];
j--;
} while (j >= 0 &&R[j]>t);
R[j + 1] = t;
}
}
}
在上面的这个程序中,我们从数组的第二个元素开始遍历排序。第一个循环,如果第二个元素比前面的小,那么首先把第前面的元素往后挪,边挪边比较,直到比前面的元素大为止。