插入排序,最简单的排序算法。本次采用动态数组实现。
1.申请动态数组空间
printf("输入数组的大小length:\n");
int length=0;
scanf("%d",&length);
/****动态分配内存初始化数组***********************/
int * array = (int*)malloc(length * sizeof(int));
申请长度为length的int型数组array。
2.插入排序算法实现
void insert_sort(int array[],int length)
{
int i,j,key;
for(j=1;j<length;j++)
{
key = array[j];
i = j-1;
while(i>=0 && array[i]>key)
{
array[i+1] = array[i];
i = i-1;
}
array[i+1] = key;
print_array(array,length);
}
}
原数组如下图:
第一次循环时:
j=1;i=j-1=0;key=array[1]=2;
因此,2、5交换
第二次循环:
j=2;i=j-1=1;key=array[2]=4;
while循环 i>=0 && array[i]>key为真(i=1;5>4):
执行array[i+1] = array[i];i = i-1;(i=0)
此时数组为:
此时while循环为假,2<4,
所以执行array[i+1] = key;即array[1]=4;
此时数组为:
此处不一一列举每次循环的过程了。最后给出运行的截图: