C语言 冒泡排序

2023-05-16

目标:

使用冒泡排序对一个数组进行排序

要求:

(1)从小到大输出排序结果 

(2)输出每一趟排序

(3)计算交换多少次

一 、将数组元素输入

本题要求先输入数组元素个数后再输入对应个数的元素后存入数组中再进行排序,主函数如图:

#include<stdio.h>
int main()
{
	//int arr[] = { 9,8,7,6,5,4,3,2,1 };

	int i = 0;
		int n = 0;
	int arr[9] = {0};
	scanf_s("%d", &n);//输入数组元素个数
	for (i = 0; i < n; i++)//将数组元素存入数组中
	{
		scanf_s("%d", &arr[i]);
	}
	int sz = sizeof(arr) / sizeof(arr[0]);//求出数组的长度
	bubble(arr, sz);//冒泡排序的函数
	return 0;
}

二、进行冒泡排序

在输入数组元素后建立一个函数对数组进行排序并将数组输出,

以下为简单的冒泡排序代码:

void bubble(int arr[], int sz)
{
	int i, j, temp;
	for (i = 0; i < sz - 1; i++)
	{
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
		for (j = 0; j < sz; j++)
		{
			printf("%d ", arr[j]);
		}
	}
}

注意:

冒泡排序的原理是将第一个元素与后面的元素进行比大小 若改元素满足题目要求则二者进行替换,以此类推,将元素从左至右进行依次排序,如若需要对冒泡排序的次数、元素交换次数及每次冒泡排序后的结果进行打印出来便于更直观的看则可对上述代码进行优化,得到以下代码:

void bubble(int arr[], int sz)
{
	int i, j, temp;
	int count = 0;
	for (i = 0; i < sz - 1; i++)
	{
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
				count++;
			}
		}
		printf("第%d轮冒泡排序:", i + 1);//打印每轮的冒泡排序 
		for (j = 0; j < sz; j++)
		{
			printf("%d ", arr[j]);
		}
		printf("\n\n");
	}
	printf("最终结果是: ");//打印最终结果 
	for (i = 0; i <= sz - 1; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	printf("共交换%d次", count);//打印次数
}

由于在main函数中已经输入过n,则n即为数组的长度,后续无需再进行

int sz = sizeof(arr[])/sizeof(arr[0]);的计算  所以上述代码中该语句可删除

完整代码如下:

#include<stdio.h>
void bubble(int arr[], int sz)
{
	int i, j, temp;
	int count = 0;
	for (i = 0; i < sz - 1; i++)
	{
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
				count++;
			}
		}
		printf("第%d轮冒泡排序:", i + 1);//打印每轮的冒泡排序 
		for (j = 0; j < sz; j++)
		{
			printf("%d ", arr[j]);
		}
		printf("\n\n");
	}
	printf("最终结果是: ");//打印最终结果 
	for (i = 0; i <= sz - 1; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	printf("共交换%d次", count);//打印次数
}
int main()
{
	//int arr[] = { 9,8,7,6,5,4,3,2,1 };

	int i = 0;
		int n = 0;
	int arr[9] = {0};
	scanf_s("%d", &n);
	for (i = 0; i < n; i++)
	{
		scanf_s("%d", &arr[i]);
	}
	int sz = sizeof(arr) / sizeof(arr[0]);
	bubble(arr, sz);
	return 0;
}

运行结果如图:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言 冒泡排序 的相关文章

随机推荐

  • JavaScript表达式与运算符的使用以及if分支结构

    一 表达式与运算符 表达式是对一个或多个变量或值 xff08 操作数 xff09 进行运算 xff0c 并返回一个新值 运算符可以分为一下类别 xff1a 赋值运算符 var a 61 10 var b 61 20 var c 61 a 4
  • 应届生学的 java,转自动化测试拿到 15k 薪资,送给大家的经验积分

    窗外 xff0c 西安的冬天阳光明媚 xff0c 坐在电脑前心情十分平静 想在这个难得的闲暇里 xff0c 想起记录一下自己这些年的经历 xff0c 也是给自己留一点以后可以回忆的故事 个人 2015 年入学 xff0c 武汉某大学计科相关
  • 在VS Code的notebook中编写Rust代码

    目录 背景 前提条件 操作步骤 背景 在VS Code的notebook中编写Rust代码 xff0c 听起来就觉得绕 VS Code已经有Rust插件 xff0c 支持编写Rust代码 xff0c 为什么搞这么复杂 为了综合两者的优点 x
  • Linux内核下gitee的使用

    一 什么是git git是一个开源的分布式版本控制系统 xff0c 用于敏捷高效地处理任何或小或大的项目 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件 Git 与常用的版本控
  • 洛谷 P1786 帮贡排序

    目录 输入 授予职位 输出前按输出规则排序 输出 最后代码 题目是非常长长长长长长长长长长长长长长长长长长长长长长长长长长长长长 我花了2个小时才做完 这题是大模拟 xff08 打磨你 xff09 xff0c 题目也很长 xff0c 需要耐
  • ./nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such

    这个错误提示说明nginx在运行时找不到libpcre so 1这个共享库文件 xff0c 可能是因为系统中没有安装PCRE库或者安装的PCRE库版本不对导致的 解决方法如下 xff1a 确认系统中是否已经安装了PCRE库 xff0c 可以
  • netperf使用指南

    netperf使用笔记 netperf 是一种非常常见的测量网络带宽的工具 xff0c 其安装非常简单 xff1a 1 下载netperf包 2 进入netperf目录 xff0c configure 3 make 4 make insta
  • debian中设置默认声卡

    alsamixer 设置默认声卡 sudo nano etc asound conf 设置声卡1为默认 则写入以下内容 xff1a defaults ctl card 1 defaults pcm card 1 defaults timer
  • zabbix第三方邮箱警告配置

    1 安装postfix软件 root 64 server yum y install postfix Last metadata expiration check 18 30 18 ago on Sun 04 Sep 2022 04 11
  • Python常用基础语法知识点大全合集,看完这一篇文章就够了

    介绍 Python 是一门独特的语言 xff0c 快速浏览一下他的要点 xff1a 面向对象 xff1a 每一个变量都是一个类 xff0c 有其自己的属性 xff08 attribute xff09 与方法 xff08 method xff
  • 删除重复数字的三种方法(详解)

    前言 xff1a 本期是关于去重数字的三种方法详解 xff0c 今天你c了吗 xff1f 输入描述 xff1a 第一行 xff0c 输入一个整数n xff0c 表示序列有n个整数 第二行输入n个整数 xff08 每个整数大于等于1 xff0
  • 【结构体】 结构体引用、结构体数组指针、包含结构的结构体

    目录 一 概念 变量的定义 初识结构体 结构体变量的定义 引用结构体类型的初始化 二 结构体的数组 认识结构体数组 初始化结构体数组 三 结构体指针 初识结构体指针 指向结构体数组的指针 结构体作为函数参数 1 使用结构体变量作为函数参数
  • 【数组的排序方法】 选择法、冒泡法、交换法、插入法、折半法

    目录 前言 一 选择法排序 二 冒泡法排序 三 交换法排序 四 插入法排序 五 折半法排序 前言 我们前面已经了解过数组的理论知识 xff0c 但虽说数组是一个有序的集合 xff0c 但这里的顺序指的是数组元素所在数组中的位置 xff0c
  • 【数组】【循环】用冒泡和顺序排列法从小到大排列十个整数

    一 大致思路 用数组排列十个整数 xff0c 数组的作用无非是用来定义十个整数 xff0c 所以一开始先定义a 10 但那固然可以先定义一个常量为10 xff0c 都一样的 xff0c 然后程序中大多用循环语句 xff0c 输入用循环 外部
  • 有关“当前不会命中断点,还没有为该文档加载任何符号”问题(未解决)

    在学习指针与数组关系时 xff0c 有时会出现关于断点的问题 虽然报错了但是程序可以正常运行 xff0c 只是不会在断点位置停下 在网上查找了很多解决方法 xff0c 如工具 选项 调试 常规中的 要求源文件和原始版本完全匹配 的勾去掉或者
  • 用递归方法求n的阶乘

    解析在代码注释里面 xff0c 源码也在下面 源码 xff1a 用递归方法求n的阶乘 include lt stdio h gt int main int fac int 声明函数 int n y 定义变量 printf 34 请输入一个整
  • C++语言求百鸡问题

    一 问题提出 xff1a 百鸡问题 xff1a 鸡翁一 xff0c 值钱五 xff1b 鸡母一 xff0c 值钱三 xff1b 鸡雏三 xff0c 值钱一 百钱买百鸡 xff0c 问鸡翁 母 雏各几何 xff1f 二 编程求解 xff1a
  • sublime text _注册码

    转自 xff1a https 9iphp com web html sublime text 3 license key html 使用方法 打开 Sublime Text 3 的 Help Enter Licence xff0c 然后根据
  • JS 中的=>箭头函数使用说明

    在新的JS版本中 xff0c 出现了以双箭头 61 gt 表示函数的方式即箭头函数 以下对箭头函数的使用作出说明 一 箭头函数与普通函数 xff08 function xff09 的区别 xff1a 1 1 箭头函数形式如下 xff1a s
  • C语言 冒泡排序

    目标 xff1a 使用冒泡排序对一个数组进行排序 要求 xff1a xff08 1 xff09 从小到大输出排序结果 xff08 2 xff09 输出每一趟排序 xff08 3 xff09 计算交换多少次 一 将数组元素输入 本题要求先输入