C语言冒泡排序的实现

冒泡排序是一种最简单的排序方法,通过比较相邻的元素,若发生倒序,则交换,使最大值“沉”到最后。其空间复杂度为O(1),时间复杂度为O(n2)。冒泡排序是一种稳定的排序,可可用于顺序或者链式存储结构,平均时间性能比直接插入差。当初始记录无序且n较大时,不宜采用此方法。

首先是预定义和类型定义:

#define OK 1
#define ERROR 0

typedef int ElemType;
typedef int Status;

typedef struct{
	ElemType *data;
	int length;
}SqList;

顺序表创建:

Status EnSqList(SqList *L, ElemType e, int n)
{
	L->data[n] = e;
	L->length++;
	return OK;
}

冒泡排序算法:

void BubbleSort(SqList *L)
{
	int j, temp, flag = 1;
	while (flag == 1 && (L->length - 1) > 0)
	{
		flag = 0;
		for (j = 0; j < (L->length - 1); j++)
		{
			if (L->data[j]>L->data[j + 1])
			{
				flag = 1;
				temp = L->data[j];
				L->data[j] = L->data[j + 1];
				L->data[j + 1] = temp;
			}
		}
	}
}

初始化flag为1表示数组无序,当数组无序并且数组长度大于1的时候,执行循环:

先领flag=0,假设数组有序,然后j从0开始判断j号元素是否比j+1号元素大,若大,则交换位置,最终使其“沉”到最后一位,并让flag为1表示数组仍然无序。

重复执行以上操作。

加入main():

int main(void)
{
	SqList L;
	ElemType e;
	int i, n;
	L.length = 0;
	printf("输入元素个数:");
	scanf("%d", &n);
	L.data = (int *)malloc(sizeof(int)*n);
	srand((int)time(0));
	for (i = 0; i < n; i++)
	{
		e = rand();
		EnSqList(&L, e, L.length);
	}
	printf("原数组:");
	for (i = 0; i < L.length; i++)
		printf("%d ", L.data[i]);
	printf("\n");
	BubbleSort(&L);
	printf("排序后:");
	for (i = 0; i < L.length; i++)
		printf("%d ", L.data[i]);
	printf("\n");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值