(19)写一个函数,用”起泡法“对输入的10数字符按由小到大顺序排列

用”起泡法“对输入的10数字符按由小到大顺序排列

起泡法:即每一次将相邻两个数进行比较,若符合条件则交换两个数的值。每进行一趟排序,最大的一个数变成最后一个数。以此类推,直至整个数组按照由小到大排列。

举例:现有数组(8 4 3 7 5 6 2 1)
第一趟:4 3 7 5 6 2 1 8
第二趟:3 4 5 6 2 1 7 8
第三趟:3 4 5 2 1 6 7 8
第四趟:3 4 2 1 5 6 7 8
第五趟:3 2 1 4 5 6 7 8
第六趟:2 1 3 4 5 6 7 8
第七趟:1 2 3 4 5 6 7 8

程序分析:由于每一次进行排序后均会产生一个数不用进行比较,因此设置变量k控制不用进行排序的数的个数。由于不确定每一次排序的比较次数,故采用while循环,在循环体中将前一个数与后一个数进行比较。在主函数中输入和输出10个数字。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
	void z(int a[10]);
	int a[10];
	printf("请输入10个数字:");
	int i;
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &a[i]);
	}
	z(a);
	printf("10个数字从大到小排序为:");
	for (i = 0; i < 10; i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n");
	system("pause");
	return 0;
}
void z(int a[10])
{
	int i, t, j;
                i = 0; j = 1;
	int k;
	for (k = 0; k <= 9; k++)
	{
		while (j < 10 - k)//每一趟比较结束后最大的数排到最后,第二次这个数不用进行比较
		{
			if (a[i] > a[j])//条件符合,交换二者的值
			{
				t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
				i++;//无论是否符合条件,j、j均自增1
				j++;
		}
		i = 0; j = 1;//重置i,j的值
	}
}

调试结果:
在这里插入图片描述
呜呜,这个程序真的弄了我好长时间(主要是因为我太菜了)。刚开始的时候只能写出进行第一趟排序的代码,然后想了很久都不知道怎样循环进行每一趟的比较。最后没有办法去网上搜了其他人的代码来看,但是虽然他们的代码调试出来是正确的,却不是我的思路我理解不了一些代码的含义,最后突然恍然大悟,可以设置一个变量k来控制不用进行排序的数的个数(即循环趟数),一下子问题就解决了。终于终于完成啦这个题目!哦耶!

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值