版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q1075355798/article/details/79839541
思路
首先将无序队列的第一个元素,看作已经排好序。然后拿无序队列的第二个元素与第一个元素进行比较,(此处考虑升序排列的情况下),如果第二个元素小于第一个元素,则将第二个元素插入到第一个元素的左边。然后循环进行,直到无序队列的最后一个元素比较完成。因为涉及到数据位置的移动、交换,需要一个中间变量。
实现
/*
@function: insert_sort
@functional: insert sort
*/
static void insert_sort(void)
{
int arry[] = {13, 12, 5, 3, 14, 90, 0, 11, 23, 9, 15, 99, 100, 96,3};
int arry_len = sizeof(arry)/sizeof(arry[0]);
int number_of_times = 0;
for(int i = 0; i < arry_len; i++)
printf("%d ", arry[i]);
printf("\n");
for (int i = 1; i < arry_len; i++) {
int index = i;
for (int j = index - 1; j >= 0; j--) {
int temp = arry[index];
if (temp < arry[j]) {
arry[index] = arry[j];
arry[j] = temp;
index = j;
number_of_times++;
} else {
continue;
}
}
}
for(int i = 0; i < arry_len; i++)
printf("%d ", arry[i]);
printf("\n");
printf("%s: number of times = %d\n\n",__func__, number_of_times);
return ;
}
int main(void)
{
insert_sort();
return 0;
}
结果
./a.out
13 12 5 3 14 90 0 11 23 9 15 99 100 96 3
0 3 3 5 9 11 12 13 14 15 23 90 96 99 100
insert_sort: number of times = 39