减治法思想,通过对较小已排序数组的扩充,得到整体有序。对于少量元素的排序,它是一个有效的算法。算法保证在对第j个元素进行排序时,前面的[0,...,j-1]已有序。
效率:
在最好情况下,待排序数组已有序,此时算法属于O(N)。
在最坏情况下,待排序数组已反向排序,此时算法属于O(N^2),此时和比较排序的效率相同。
如果输入基本有序,则该算法运行很快,这使它优于一些基本排序,例如:选择排序和冒泡排序。
代码:
参考:
《算法导论》 P9-P16.
效率:
在最好情况下,待排序数组已有序,此时算法属于O(N)。
在最坏情况下,待排序数组已反向排序,此时算法属于O(N^2),此时和比较排序的效率相同。
如果输入基本有序,则该算法运行很快,这使它优于一些基本排序,例如:选择排序和冒泡排序。
代码:
#include <stdio.h>
void InserSort(int *array, unsigned int n)
{
int i, j;
int temp;
/* 排列n个数要进行n-1趟比较 */
for (i = 1; i < n; i++)
{
temp = array[i];
for (j = i-1; j >= 0 && array[j] > temp; j--)
array[j+1] = array[j];
array[j+1] = temp;
}
}
int main(void)
{
int i;
int array[] = {34, 8, 64, 51, 32, 21};
int len = sizeof(array)/sizeof(array[0]); /* 整形数组大小计算方法 */
InserSort(array, len);
for (i = 0; i < len; i++)
printf("%d ", array[i]);
printf("\n");
return 0;
}
参考:
《算法导论》 P9-P16.