将要排序的元素通过插入的方式找到其适当的位置来进行排序。
直接上code吧
int g_counter1 = 0;
int g_counter2 = 0;
void insert_sort(int *list, int len)
{
int i, j, k;
int temp;
for(i = 1; i < len; i++)
{
temp = list[i];
for (j = i - 1; j >= 0; j--)
{
if (temp < list[j]) {
list[j + 1] = list[j];
list[j] = temp;
}
g_counter1++;
}
printf("\n i = %d current state :\n", i);
for(k = 0; k < len; k++)
printf("%d ", list[k]);
}
}
void insert_sort2(int *list, int len)
{
int i, j, k;
int temp;
for(i = 1; i < len; i++)
{
temp = list[i];
j = i - 1;
while (j >= 0 && temp < list[j])
{
list[j + 1] = list[j];
j--;
g_counter2++;
}
list[j+1] = temp;
printf("\n i = %d current state :\n", i);
for(k = 0; k < len; k++)
printf("%d ", list[k]);
}
}
经过评估,发现第二种写法的效率要高一点。
该方法是一种的稳定的排序方法,空间复杂度为O(1),时间复杂度为O(n^2);