IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【初学者入门C语言】之算法篇(冒泡排序和选择排序) -> 正文阅读

[数据结构与算法]【初学者入门C语言】之算法篇(冒泡排序和选择排序)

个人主页:天寒雨落的博客_CSDN博客-C,CSDN竞赛,python领域博主

💬 刷题网站:一款立志于C语言的题库网站蓝桥杯ACM训练系统 - C语言网 (dotcpp.com)?

?特别标注:该博主将长期更新c语言内容,初学c语言的友友们,订阅我的《初学者入门C语言》专栏,关注博主不迷路!

目录

一、冒泡排序

1.原理

2.举例

? ? ? ? 1.题目

? ? ? ? ?2.代码

? ? ? ? 3.执行结果

二、选择排序

1.原理

2.举例

1.题目

2.代码

3.运行结果


一、冒泡排序

1.原理

? ? ? ? 它从头到尾每次都对相邻的两个数进行比较,将较大(或较小)的数交换到后一个元素中,每一轮的比较都在没有排好的数据中,找出最大数(或最小数)放在这些数的后面。

通俗的说就是当我们上体育课的时候会排身高,那么就要最高的站到最后面,老师就要先从一号开始看,用一号跟二号比较,如果一号更高,那么他们俩换位置,一号站第二排,二号站第一排,如果不然,则不换。接着比较二排的和三号的身高,如果三号更高,重复上面的操作,直到比较到最后一个人。

假设10个人排队int a[10];

比较第一轮:

for(int j=0;j<9;j++){

? ? ? ? if(a[j]>a[j+1]){

? ? ? ? ? ? ? ? t=a[j];

? ? ? ? ? ? ? ? a[j]=a[j+1];

? ? ? ? ? ? ? ? a[j+1]=t;

}

}//需要比较9次

比较第二轮

for(int j=0;j<8;j++){

? ? ? ? if(a[j]>a[j+1]){

? ? ? ? ? ? ? ? t=a[j];

? ? ? ? ? ? ? ? a[j]=a[j+1];

? ? ? ? ? ? ? ? a[j+1]=t;

}//需要比较8次(不在比较上一轮已经排好的)

......

上面说的只是把最高的排到了最后一排,还有第二高,第三高的呀,所以此时有需要一个for循环保证高的人都在他们应该在的位置,那么第二次排的时候,我们还需要管那个最高的人吗?当然不用啊,他都已经排好了,不用再动他了所以控制比较的循环变量是小于控制人数的循环变量的

直接用两个for循环

for(int i=0;i<9;i++){

????????for(int j=0;j<9-i;j++){

? ? ? ? ????????if(a[j]>a[j+1]){

? ? ? ? ? ? ? ? ????????t=a[j];

? ? ? ? ? ? ? ? ????????a[j]=a[j+1];

? ? ? ? ? ? ? ? ????????a[j+1]=t;

???????????????}

????????}

}

2.举例

? ? ? ? 1.题目

输入10个数对其进行排序

? ? ? ? ?2.代码

#include "stdio.h"

int main() {
	int t, a[10];

	for (int i = 0; i < 10; i++) {
		scanf("%d", &a[i]);
	}

	for (int i = 0; i < 9; i++) {

		for (int j = 0; j < 9 - i; j++) {

			if (a[j] > a[j + 1]) {

				t = a[j];

				a[j] = a[j + 1];

				a[j + 1] = t;

			}

		}

	}

	for (int i = 0; i < 10; i++) {
		printf("%d\t", a[i]);
	}

	return 0;
}

? ? ? ? 3.执行结果

二、选择排序

1.原理

? ? ? ? 它是找出最大数(或最小数)放到最前面,它不再是数组前后比较,而是在一轮里一直拿一个位置数跟后面的比较。

? ? ? ? 通俗的说就是在排队的时候,先拿一号依次跟后面的每一个人都比较,如果和它比较的人比一号小,则他俩换位,小的这个人站第一排,拿这个人跟后面比,以此类推,确保第一个是最低的。第二轮从第二个人开始,重复上面的操作,不在动排好的人

假设10个人排队int a[10];

比较第一轮:

for(int i=0;i<9;i++){

for(int j=i+1;j<10;j++){

? ? ? ? if(a[i]>a[j]){

? ? ? ? ? ? ? ? t=a[i];

? ? ? ? ? ? ? ? a[i]=a[j];

? ? ? ? ? ? ? ? a[j]=t;

}

}

需要注意的是for循环里的三个表达式,我们已经把第一个赋给max,所以就直接从第二个开始,也就是从索引1开始,i小于10

2.举例

1.题目

输入10个数对其进行排序

2.代码

#include "stdio.h"

int main() {
	int t, a[10];

	for (int i = 0; i < 10; i++) {
		scanf("%d", &a[i]);
	}

	for (int i = 0; i < 9; i++) {

		for (int j = i + 1; j < 10; j++) {

			if (a[i] > a[j]) {

				t = a[i];

				a[i] = a[j];

				a[j] = t;
			}

		}

	}

	for (int i = 0; i < 10; i++) {
		printf("%d\t", a[i]);
	}

	return 0;
}

3.运行结果

各位C语言的初学者有问题随时都可以问我,随时为您解惑!!!

👍+??+??是对博主最大的鼓励与支持!!!

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 01:12:58  更:2022-09-30 01:17:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 18:34:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码