C语言排序之冒泡排序

在学习C语言时,必然会学到的一种排序,就是冒泡排序。

从键盘输入数字并降序排列

冒泡排序的意思是相邻的两个元素进行比较,如果前面的元素小于后面的元素,则把两个元素的位置调换;反之则不做调整。
***首先***要考虑的是如何从键盘输入数字,并且把数字有序的存起来。这就要用到scanf(),将数组从键盘输入;使用数组将输入的数字存起来。
***其次***需要考虑如何对已有的数组升序排列。两个数字的比较并且是同一个数组,这就需要for循环,并且是两个for循环实现。
***最后***重要的问题解决了,那就需要用代码实现。以下是我写的一个关于冒泡升序排列的一个代码。

#include<stdio.h>
#include<Windows.h>
#pragma warning(disable:4996)
void Order(int a,int arr[]){
	int term = 0;
	for (int j = 0; j < a - 1; j++){//排序
		for (int i = j + 1; i < a; i++){
			if (arr[j] < arr[i]){
				term = arr[j];
				arr[j] = arr[i];
				arr[i] = term;
			}
		}
	}
	printf("排列大小后:\n");
	for (int i = 0; i < a; i++){
		printf("%d\n", arr[i]);
	}
}
int main(){
	int *arr;
	int a = 0;
	printf("请输入数字的个数:\n");
	scanf("%d", &a);
	arr = (int*)malloc(a*sizeof(int));//分配a个整型类型的空间,用arr指向该空间。
	for (int i = 0; i < a; i++){
		printf("请输入第%d数字:", i + 1);
		scanf("%d", &arr[i]);
	}
	Order(a, arr);
	system("pause");
	return 0;
}

这是 实现的结果
以上是实现的结果。排序的功能使用了一个函数,
term = arr[j];
arr[j] = arr[i];
arr[i] = term;
使用了一个容器 ,先将前面比较小的数字放到term里,然后arr[j]的内容为空,将arr[i]的值付给arr[j],然后将term的值赋给arr[j]。这就实现了两个数字位置的调换。
因为相邻的元素要比较,所以在最坏的情况下,是将所有的元素两两相邻比较一轮之后,只能将一个元素放到指定位置,即找到最小的(最大的)。然后还需要比较第二轮找到次小的…以此类推,假设有n个数字比较,则需要n-1+n-2+…+1.其实是数组总的第一个元素依次和后面的每一个元素比较,第二个元素和后面的每一个元素比较…这两个所进行比较的次数是相同的。所以使用两个for循环实现冒泡排序的算法。
以上,欢迎指正哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值