10个数比大小(排序)——冒泡和选择

10个数比大小(排序)——冒泡和选择

一. 冒泡法(起泡法)

  1. 冒泡排序的基本概念是(以升序排序为例):

    依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

2.代码

#include<stdio.h>
int main()
{
   void comp(int a[]);//声明函数
   int a[10];
   printf("please input 10 numbers:");//输入
   for (int  i = 0; i < 10; i++)
   {
   	scanf_s("%d", &a[i]);
   }
   comp(a);//调用函数
   printf("The right number:");//输出
   for (int  i = 0; i < 10; i++)
   {
   	printf("%3d", a[i]);
   }
   return 0;
}
void comp(int a[])//定义函数
{
   int i, j, k;
   for ( i = 0; i < 9; i++)
   {
   	for (j = 0; j < 9 - i; j++)
   	{
   		if (a[j]>a[j+1])
   		{
   			k = a[j]; a[j] = a[j + 1]; a[j + 1] = k;
   		}
   	}
   }
}

3.运行结果
在这里插入图片描述
二.选择法

1.选择排序(从小到大)的基本思想是,
首先,选出最小的数,放在第一个位置;
然后,选出第二小的数,放在第二个位置;
以此类推,直到所有的数从小到大排序。

——————————————————————

下面,以对 3 2 4 1 进行选择排序说明排序过程,使用comp(定义的函数) 记录当前最小的数所在的位置。

第1轮 排序过程 (寻找第1小的数所在的位置)
3 2 4 1(最初, comp=1)
3 2 4 1(3 > 2, 所以comp=2)
3 2 4 1(2 < 4, 所以 comp=2)
3 2 4 1(2 > 1, 所以 comp=1, 这时候确定了第1小的数在位置4)
1 2 4 3 (第1轮结果,将3和1交换,也就是位置1和位置4交换)

第2轮 排序过程 (寻找第2小的数所在的位置)
1 2 4 3(第1轮结果, comp=2,只需要从位置2开始寻找)
1 2 4 3(4 > 2, 所以comp=2)
1 2 4 3(3 > 2, 所以 comp=2)
1 2 4 3(第2轮结果,因为comp位置刚好在第2个位置,无需交换)

第3轮 排序过程 (寻找第3小的数所在的位置)
1 2 4 3(第2轮结果, comp=3,只需要从位置2开始寻找)
1 2 4 3(4 > 3, 所以comp=3)
1 2 3 4(第3轮结果,将3和4交换,也就是位置4和位置3交换)

至此,排序完毕。(文字部分有转载 有所修改)

2.代码

#include<stdio.h>
int main()
{
	void comp(int a[]);//声明函数
	int a[10];
	printf("please input 10 numbers:");//输入
	for (int i = 0; i < 10; i++)
	{
		scanf_s("%d", &a[i]);
	}
	comp(a);//调用
	printf("The right number:");//输出
	for (int i = 0; i < 10; i++)
	{
		printf("%3d", a[i]);
	}
	return 0;
}
void comp(int a[])//定义
{
	int i, j, k, t;
	for (i = 0; i < 9; i++)
	{
		k = i;
		for (j = i + 1; j < 10; j++)
		{
			if (a[j] < a[k])
			{
				 k=j ;
			}
		}t = a[k]; a[k] = a[i]; a[i] = t;
	}
}

3.运行结果
在这里插入图片描述

已标记关键词 清除标记
相关推荐
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质? 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹?   那么C++就是你个人能力提升,职业之路进阶的不二之选。 【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署; 2.吊打一切关于C++的笔试面试题; 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块 基础篇 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 进阶篇 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 提升篇: 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页