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语言实现)

🔆欢迎来到我的【数据结构】专栏🔆

  • 👋我是Brant_zero,一名学习C/C++的在读大学生。
  • 🌏?我的博客主页????????Brant_zero的主页
  • 🙏🙏欢迎大家的关注,你们的关注是我创作的最大动力🙏🙏

🍁前言

????????堆排序、希尔排序、快速排序、归并排序这几个BOSS过后,我们将剩下三个比较简单的排序再实现一下,总算把八大排序都学习完了~~~

目录

一、 冒泡排序

二、 选择排序

三、计数排序


一、 冒泡排序

冒泡排序算法的原理如下:?

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。?

  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素会是最大的数。?

  3. 针对所有的元素重复以上的步骤,除了最后一个。?

  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。?

我们来看看下面的动图:

void swap(int *a,int *b) 
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
void BubbleSort(int* a, int n)
{
	for (int i = 0; i < n - 1; i++)
	{
		int exchange = 1;
		for (int j = 0; j < n - 1 - i; j++)
		{
			if ( a[j + 1]< a[j])
			{
				swap(&a[j], &a[j + 1]);
				exchange = 0;
			}
		}
		if (exchange)
			break;
	}
}

二、 选择排序

选择排序算法原理如下:

  1. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

  2. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

  3. 重复第二步,直到所有元素均排序完毕

void swap(int *a,int *b) 
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
void SelectSort(int* a, int n)
{
	for (int i = 0; i < n-1; i++)
	{
		int temp = i;
		for (int j = i+1; j < n; j++)
		{
			if (a[j] < a[temp])
			{
				temp = j;
			}
		}
		swap(&a[temp], &a[i]);
	}
}

三、计数排序

计数排序算法原理如下:

  1. 计算出当前数据集合的范围区间range,即最大值 - 最小值。
  2. 开辟range大小的计数表(使用calloc),记录每个数据出现的次数。
  3. 统计每个数出现的次数,放到减去最小值后其在计数表中的相对位置
  4. 回写数据。遍历计数表,如果表中位置不为零,则直接回写到元素组中,其值为下标 + 最小值,则可将相对位置转回为绝对位置。

void CountSort(int* a, int n)
{
	int max = a[0];
	int min = a[0];
	for (int i = 1; i < n; i++)
	{
		if (max < a[i])
			max = a[i];
		if (min > a[i])
			min = a[i];
	}
	int range = max - min+1;
	int* temp = (int*)calloc(range, sizeof(int));
	for (int i = 0; i < n; i++)
	{
		temp[a[i] - min]++;
	}
	//回写
	int j = 0;
	for (int i=0;i<range;i++)
	{
		while (temp[i]--)
		{
			a[j++] = i+min;
		}
	}
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 19:09:52  更:2022-07-20 19:10:17 
 
开发: 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年11日历 -2024/11/25 23:50:48-

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