冒泡排序和直接选择排序(C/C++实现)

文章目录

冒泡排序(交换排序)

基本思想

基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。

特性总结

  1. 冒泡排序是一种非常容易理解的排序
  2. 时间复杂度:O(N^2)
  3. 空间复杂度:O(1)
  4. 稳定性:稳定

代码实现

c 复制代码
void bubbleSort(int* a, int n)//冒泡排序(时间复杂度为O(N^2),空间复杂度为O(1))
{
	for (int i = 0; i < n; i++)
	{
		bool exchange = false;
		for (int j = 1; j < n - i; j++)
		{
			if (a[j - 1] > a[j])
			{
				int tmp = a[j];
				a[j] = a[j - 1];
				a[j - 1] = tmp;
				exchange = true;
			}
		}
		if (exchange == false)break;
	}
}

直接选择排序

基本思想

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。

  • 在元素集合arrayi--arrayn-1中选择关键码最大(小)的数据元素
  • 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换
  • 在剩余的arrayi--arrayn-2(arrayi+1--arrayn-1)集合中,重复上述步骤,直到集合剩余1个元素

特性总结

  1. 直接选择排序思想非常好理解,但是效率不是很好。实际中很少使用
  2. 时间复杂度:O(N^2)
  3. 空间复杂度:O(1)
  4. 稳定性:不稳定

代码实现(优化,每次循环同时选择最小和最大的数)

cpp 复制代码
void Swap(int& a, int& b)
{
	int tmp = a;
	a = b;
	b = tmp;
}

void printArr(int* a, int n)
{
	for (int i = 0; i < n; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");
}

void selectSort(int* a, int n)//选择排序,时间复杂度为O(N^2),空间复杂度为O(1)
{
	int begin = 0, end = n - 1;
	while (begin < end)
	{
		int maxi = begin, mini = begin;
		for (int i = begin; i <= end; i++)
		{
			if (a[i] > a[maxi])maxi = i;
			if (a[i] < a[mini])mini = i;
		}
		Swap(a[begin], a[mini]);
		if (maxi == begin)//如果maxi和begin重叠,修正一下即可
		{
			maxi = mini;
		}
		Swap(a[end], a[maxi]);
		begin++;
		end--;
	}
}
相关推荐
OPEN-F5 小时前
C++进阶教程:继承与多态
开发语言·c++
luj_17686 小时前
大律师考核应重能力与科技素养
c语言·开发语言·c++·经验分享·算法
刃神太酷啦7 小时前
Linux 系统 MySQL 完整安装配置教程:从卸载 MariaDB 到优化 my.cnf----《Hello MySQL!》(1)
android·linux·c语言·c++·mysql·leetcode·mariadb
萌动的小火苗8 小时前
数据结构面试题【无答案】
c语言·开发语言·数据结构·链表
汉克老师10 小时前
CSP-J 初赛(以满分为目标):第十五课《结构体、排序与自定义比较——从“给数字排队”到“给一群人排队”》
c++·csp-j·小学生·学c++编程
HugoStudio_SWAN11 小时前
C++ CMD 互动动画:按键触发爆炸效果
开发语言·c++·学习·程序人生
水饺编程11 小时前
第5章,[Win32 章节] :Polygon 函数和多边形填充模式
c语言·c++·windows·visual studio
wuminyu11 小时前
Java FFM处理网络读写事件源码剖析
java·linux·c语言·jvm·c++
一木 之林12 小时前
C/C++ 面向对象编程(OOP)(进阶)
java·c语言·c++
千谦阙听13 小时前
C++篇:类和对象(上)
开发语言·c++