程序设计 排序程序(冒泡/插入/选择)

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100 
 
 
typedef struct{
	int list[MAXSIZE];    //存放序列 
	int length;      //存放序列长度 
}SqList;

void menu()
{
	printf("=====================\n");
	printf("\n排序法:\n");
	printf("1.输出菜单\n");
	printf("2.输入待排序的序列\n");
	printf("3.冒泡排序法\n");
	printf("4.简单选择排序法\n");
	printf("5.直接插入排序法\n");
	printf("6.退出!\n");
	printf("=====================\n");
}

void CreateList(SqList &L,int n)   //创建序列 
{
	L.length = n;                 //将元素长度交给结构体中变量  后续就不再修改 
	for(int i=0;i<L.length;i++)   //循环输入元素 
	{
		printf("\n请输入第%d个元素:",i+1); 
		scanf("%d",&L.list[i]);
	}                   
}

//输出序列 
void Outlist(SqList L)    
{
	for(int i=0;i<L.length;i++)
	{
		printf("%d\t",L.list[i]);
	}
	printf("\n");
}

//冒泡排序法 
void Bubble(SqList &L)
{
	int x=0;
	for(int i=L.length-1;i>0;i--)
	{		
		for(int j=0;j<i;j++)  //不断的与后一个数进行比较,找到一个最大数,放在最后 
			if(L.list[j]>L.list[j+1])
			{
				x = L.list[j];
				L.list[j] = L.list[j+1];
				L.list[j+1] = x;
			}
	}
}

//选择排序法
//找到一个最小数,放在前面, 
void Select(SqList &L)
{
	int min=0,temp=0;
	for(int i=0;i<L.length;i++)
	{
		min = i;
		for(int j=i+1;j<L.length;j++)
			if(L.list[j]<L.list[min])
				min = j;
		if(min != i)
		{
			temp = L.list[i];
			L.list[i] = L.list[min];
			L.list[min] = temp;
		}
			
	}
 } 
 
/*插入排序法
需要数组中的元素下标从1开始,0下标作为一个临时存放的监视哨,*/ 
void Insert(SqList &L)
{
	for(int i=L.length-1;i>=0;i--) //此循环将数组中元素下标调整为从1开始 
	{
		L.list[i+1] = L.list[i];		
	}
	for(int i=2;i<=L.length;i++)
	{
		if(L.list[i]<L.list[i-1])
		{
			int j=0;
			L.list[0] = L.list[i];
			L.list[i] = L.list[i-1];
			for(j=i-2;L.list[0]<L.list[j];j--)//如果判断条件不成立,则跳过循环,执行下一句 
			{
				L.list[j+1] = L.list[j];
			}
			L.list[j+1] = L.list[0];
		}
	}
	for(int i=0;i<L.length;i++)  //此循环将数组下标调整为从0开始 
		L.list[i] = L.list[i+1];
}
 
int main()
{
	SqList LL,L;    //定义一个结构体 
	int n=0;     //用来接收元素长度 
	int c = 1;
	while(c)
	{
		menu();
		printf("请选择1~6\n");
		scanf("%d",&c);
		switch(c)
		{
			case 1: 
				system("cls");
				menu();
				break;
			case 2: 
				printf("\n输入待排元素的个数:\n");
				scanf("%d",&n);
				CreateList(L,n);
				printf("\n");
				break;
			case 3:
				printf("-----冒泡排序-----\n");
				printf("排序前的序列为:\n");
				Outlist(L);
				LL = L;
				Bubble(LL);
				printf("排序后的序列为:\n"); 
				Outlist(LL);
				break;
			case 4:
				printf("-----简单选择排序-----\n");
				printf("排序前的序列为:\n");
				Outlist(L);
				LL = L;
				Select(LL);
				printf("排序后的序列为:\n");
				Outlist(LL); 
				break;
			case 5:
				printf("-----直接插入排序-----\n");
				printf("排序前的序列为:\n");
				Outlist(L);
				LL = L;
				Insert(LL);
				printf("排序后的序列为:\n");
				Outlist(LL);
				break; 
			case 6:
				printf("已退出!\n");
				exit(0);   //此函数的头文件为  stdlib.h 
				break;
			default:
				printf("输入错误,请重新输入:");
				c = 1;						
		}
		
	}
	

	return 0; 
}


第一次从无到有的写了这样一个完整的程序,算式对基础知识的一次总结,收获很多,发出来是想作为一个成长记录,同时也希望能帮到有需要的同学,这里包含了三个排序算法:冒泡排序法,选择排序法,插入排序法.比较简单.

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值