【C语言】简单排序(一)插入排序

一、算法框图

二、代码实现  

/********************
名称:插入排序
作者:豆豆 
********************/
#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

猜你喜欢

转载自blog.csdn.net/weixin_41400108/article/details/83582795