一、算法框图
二、代码实现
/********************
名称:插入排序
作者:豆豆
********************/
#include<stdio.h>
#define LENGTH 6 //宏定义数列长度为 6
int main()
{
//【初始化】数列
int a[LENGTH]={18,8,64,56,34,7}; //这里用到了数列长度 6
//打印初始数列,查看初始化是否成功
printf("--------------------\n\n");
printf("初始数列为:\n");
printf("%d %d %d %d %d %d\n\n",
a[0],a[1],a[2],a[3],a[4],a[5]); //避免这行太长,加了一个换行
printf("--------------------\n");
//开始排序
for(int i=1;i<LENGTH;i++) //i代表【趟数】
{ //由于刚开始认为数列的第一个元素即是有序数组,所以排序趟数为数列长度-1
printf("【第%d趟】\n",i);
int j=i;
int c=1; //c为【计数器】
while(1)
{
printf("\n第%d次\n\n",c);
if(j>0 && a[j]<a[j-1])
{
int t; //缓存变量
//交换
t = a[j] ;
a[j] = a[j-1] ;
a[j-1] = t ;
j--;
c++; //计数器 +1
printf("%d %d %d %d %d %d\n",
a[0],a[1],a[2],a[3],a[4],a[5]); //如果本次交换,则输出交换后的数列
}
else
{
printf("次序正确,未交换!\n");
break;
}
}
printf("\n****************"
"\n第%d趟输出结束!"
"\n****************\n",i+1); //字符串中间可以拆开
printf("--------------------\n");
}
//输出结果
printf("\n排序后数列为:\n");
printf("%d %d %d %d %d %d\n",
a[0],a[1],a[2],a[3],a[4],a[5]);
return 0;
}
三、运行结果
--------------------
初始数列为:
18 8 64 56 34 7
--------------------
【第1趟】
第1次
8 18 64 56 34 7
第2次
次序正确,未交换!
****************
第2趟输出结束!
****************
--------------------
【第2趟】
第1次
次序正确,未交换!
****************
第3趟输出结束!
****************
--------------------
【第3趟】
第1次
8 18 56 64 34 7
第2次
次序正确,未交换!
****************
第4趟输出结束!
****************
--------------------
【第4趟】
第1次
8 18 56 34 64 7
第2次
8 18 34 56 64 7
第3次
次序正确,未交换!
****************
第5趟输出结束!
****************
--------------------
【第5趟】
第1次
8 18 34 56 7 64
第2次
8 18 34 7 56 64
第3次
8 18 7 34 56 64
第4次
8 7 18 34 56 64
第5次
7 8 18 34 56 64
第6次
次序正确,未交换!
****************
第6趟输出结束!
****************
--------------------
排序后数列为:
7 8 18 34 56 64