首页 > 其他分享 >冒泡选择法(c基础)

冒泡选择法(c基础)

时间:2024-11-11 20:47:24浏览次数:6  
标签:sz arr int 基础 选择 ++ flag 冒泡 break

适合对象c语言初学者。

冒泡选择法

作用对一个数组进行排序。(介绍一下数组(c基础)(详细版)-CSDN博客

核心要点

1: 数组元素个数 sz

2: 比较后的交换。

核心思路

进行(sz - 1)趟,每一趟把最大数的放到末尾。其余数向前挪一个。

代码产生

1:先创建一个无序数组。

2:进行第一趟排序

那么如何比较与挪一个呢?

比较很简单。

只需挨着的两个比就行。

于是我们创建一个变量方便访问数组中的一个数。

其实挪一个只需让值交换就行

这就相当与交换a与b的值,只是变成数组了。

于是有

此时就完成了一趟排序。介绍一下for break continue 函数(c基础)_for语句中continue跳过表达式三吗-CSDN博客

结果为

观察发现5变到后面了。

易发现:最大数到末尾后,便不在管他。产生新的末尾与最大数。

于是我们创建新的变量表示循环趟数。

开始循环

欧克,很简单,相较于上次,只是套了一个循环而已。

运行结果:

ok.

但我们真的一定需要(5 - 1)(sz-1)趟吗?

经观察发现不是。

如果我把5改成4呢

显而易见,可以。

于是我们可以优化一下。

当他是顺序时就跳出循环。总结一下break continue(c基础)_简述跳转语句break与continue的作用和区别。段落格式字体字号-CSDN博客

于是我们想把break;插进去。

进行交换 break;就不产生作用,反之就产生。

于是考虑到用if语句。简单介绍一下 if else else if 函数(c基础)_if else算函数吗-CSDN博客

if要一个(),所以创建一个变量。

显然if语句要在交换后面。

当交换时为假,反之为真

于是进去时把flag变为真

如果进行交换,把flag值变为假。

这样当他是顺序时显然不会进行交换了。

(对36有疑问,c语言中真假情况_cyy数轴内打印真假-CSDN博客

结果:

归纳为一般情况

先求数组元素个数sz

把5改成sz即可。

如下

#include<stdio.h>
int main()
{
	//创建一个无序数组。
	int arr[] = { 5,2,0,3,6 };

	//求数组元素个数
	int sz = 0;
	sz = sizeof(arr) / sizeof(arr[0]);

	//进行第一趟排序。
	
	//创建一个变量方便访问数组中的一个数。
	int j = 0;

	//开始比较
	for (j = 0; j < sz - 1; j++)
	{
		if (arr[j] > arr[j + 1])
		{
			int temp = 0;
			temp = arr[j];
			arr[j] = arr[j + 1];
			arr[j + 1] = temp;
		}
	}

	//创建一个新的变量表示循环趟数。
	int i = 0;
	//创建一个变量控制break;
	int flag = 0;
	
		 for (i = 0; i < sz - 1; i++)
		 //开始比较
		 for (j = 0; j < sz - 1; j++)
		 {
			 //把flag的值变为真。
			 flag = 36;

			 if (arr[j] > arr[j + 1])
			 {
				 int temp = 0;
				 temp = arr[j];
				 arr[j] = arr[j + 1];
				 arr[j + 1] = temp;
				 //把flag的值变为假。
				 flag = 0;
			 }
			 if (flag)	break;
		 }

	for (j = 0; j < 5; j++)
	printf("%d ", arr[j]);

	return 0;
}

下面是创建随机数,进行排序的代码(拓展)

//生成随机数填数组再排序
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define NUM 3
int main()
{

	int arr[NUM];
	int i = 0;
	srand((unsigned int)time(NULL));

	for (i = 0; i < NUM; i++)
	{
		arr[i] = rand() % 100 + 1;

	}
	int n = 0;
	for (n = 1; n < NUM - 1; n++)
	{
		int j = 0;
		int flag = 0;
		for (j = 0; j < NUM - n; j++)
		{
			flag = 0;
			if (arr[j] > arr[j + 1])
			{
				arr[j] = arr[j] + arr[j + 1];
				arr[j + 1] = arr[j] - arr[j + 1];
				arr[j] = arr[j] - arr[j + 1];
				flag = 1;
			}
		}
		if (0 == flag) break;
	}
	for(i = 0; i < NUM; i++)
	printf("%d\n", arr[i]);

	return 0;
}

看了就行。

介绍一下如何生成随机数(c基础)-CSDN博客

Hi I am 36,thanks for your reading.I am looking forward your 

标签:sz,arr,int,基础,选择,++,flag,冒泡,break
From: https://blog.csdn.net/lb3636363636/article/details/143624340

相关文章

  • 计算物理基础【6】
    文章目录lisplisp数字1.数字类型2.基本数值操作3.常用数学函数4.比较运算5.检查数字类型6.复数操作示例:阶乘函数在Lisp中,字面数值(literalnumbers)1.整数2.浮点数3.分数4.复数5.进制表示6.特殊常数示例代码在Lisp中,运算符1.数学运算加法减法乘法除法求余和......
  • 计算物理基础【7】
    文章目录sas在SAS(StatisticalAnalysisSystem)软件中,“库”(Library)1.什么是SAS库2.创建SAS库3.SAS库的类型4.使用SAS库中的数据集5.删除SAS库6.示例:访问和操作SAS库7.总结在SAS中,日志(Log)窗口1.日志窗口的内容2.查看SAS日志窗口3.常见的日志信息正常的执行日志......
  • 现代IT基础设施管理(1):Terraform初识和小试牛刀
    基础设施包括各种云,像国内的阿里云、腾讯云和华为云,国外的AWS、微软Azure云和谷歌云,还有Kubernetes和OpenStack,都可以用Terraform进行资源管理。使用基础设施即代码(InfrastructureasCode,IaC)的方式来管理基础设施,这是现代IT基础设施管理的一个重要趋势,它允许我们以代码的形式定......
  • 一个实用的脚本 [Bash 数组基础]
     ###Bash数组基础在Bash中,数组是一种可以存储多个值的数据结构。数组的每个元素都有一个索引,从0开始。例如,假设我们有一个数组:```bashtask_ids=("task1""task2""task3")```###获取数组的所有索引`${!task_ids[@]}`语法用于获取数组`task_ids`的所有索引。具体......
  • python算法之最low三人组之一——————选择排序
    之前讲过了冒泡排序,我们再聊一聊最low三人组中的选择排序,选择排序的基本思想是:遍历整个序列,选取其中一个最小的数取出来,然后再次遍历除了刚刚选出来的最小的数的序列中最小的数现在让我们看看代码实现importrandomdefselect_sort(li):new_li=[]foriinrange(l......
  • Linux硬盘挂载与磁盘分区基础(一)(主分区、拓展分区、逻辑分区)
      我们常用windows时,会区分C盘、D盘之类的(A、B盘是软盘)就是所谓的分区,这么做为了方便数据管理,比如扩容之类的。  本文采用Linux(Ubuntu20.04)来介绍分区,其它Linux系统基本一样的。  首先,我们需要熟悉几个概念:  硬盘:存储数据用的硬件,比如移动硬盘、固态硬盘、U盘等,有了硬......
  • 数学与统计计算:Python math 与 statistics库基础教程
    数学与统计计算:Pythonmath与statistics库基础教程在数据分析、机器学习和科学计算中,数学和统计学是两个至关重要的基础。Python提供了强大的内置库math和statistics,可以帮助我们快速、方便地完成常见的数学和统计计算。本篇博客将介绍math和statistics库中的基......
  • 【SpringMVC】基础入门实战(3)
     阿华代码,不是逆风,就是我疯你们的点赞收藏是我前进最大的动力!!希望本文内容能够帮助到你!!目录一:实践1:获取header(1)普通方法 (2)简洁方法获取Header2:返回静态页面(1)返回静态页面失败(2)Controller(3)@RestController和@Controller关联3:返回数据@ResponseBody4:返回HTM......
  • 四款超实用的免费报表工具推荐!轻松选择适合你的数据神器
    现如今,报表工具逐渐成为企业数据分析和决策的重要一环。本文将为大家介绍四款免费报表工具,通过这些工具,用户可以轻松地将原始数据转换为直观易懂的报表,帮助决策者更快地获取信息和做出判断。无论是寻求简单易用、实时更新,还是需要强大的数据分析能力的用户,都能在这些工具中找到适......
  • Python基础(1):初识python、环境配置、数据类型、循环语句
    简介:python是一个解释性、编译性、互动性和面向对象的脚本语言python是一种解释性语言:开发过程中没有了编译环节python是一种交互式语言:意味着可以在cmd窗口输入python,>>>后直接执行代码Python是面向对象的语言:意味着python支持面向对象的风格或代码封装在对象的编程技......