【C语言】冒泡排序

概念

冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的列表,一次比较两个元素,并且如果它们的顺序错误就把它们交换过来。通过多次的遍历和比较,最大(或最小)的元素会逐渐"浮"到数列的顶端,因此得名"冒泡排序"。

代码

方法一:数组

c 复制代码
#include<stdio.h>

void Print(int arr[], int size)
{
	for (int i = 0; i < size; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}

void Sort(int* p1, int* p2)
{
	*p1 = *p1 ^ *p2;
	*p2 = *p1 ^ *p2;
	*p1 = *p1 ^ *p2;
}

void BubbleSort(int arr[],int size)
{
	int flag = 1;
	for (int i = 0; i < size - 1; i++)
	{
		for (int j = 0; j < size - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				Sort(&arr[j], &arr[j + 1]);
				flag = 0;
			}
		}
		if (flag)
		{
			break;
		}
	}
}

int main()
{
	int arr[] = { 34,64,82,41,25 };
	Print(arr, 5);
	BubbleSort(arr, 5);
	Print(arr, 5);
	return 0;
}

方法二:指针

c 复制代码
#include<stdio.h>

void printf(int* p, int sz)
{
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", *p++);
	}
	printf("\n");
}

void BubbleSort(int* p, int sz)
{
	int flag = 1;
	for (int i = 0; i < sz-1; i++)
	{
		for (int j = 0; j < sz - 1 - i; j++)
		{
			if (*(p + j) > *(p + j + 1))
			{
				*(p + j) = *(p + j) ^ *(p + j + 1);
				*(p + j + 1) = *(p + j) ^ *(p + j + 1);
				*(p + j) = *(p + j) ^ *(p + j + 1);
				flag = 0;
			}
		}
		if (flag)
		{
			break;
		}
	}
}

int main()
{
	int arr[] = { 23,64,3,7,34,25 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	printf(arr, sz);
	BubbleSort(arr, sz);
	printf(arr, sz);
	return 0;
}
相关推荐
承渊政道2 分钟前
【递归、搜索与回溯算法】(递归问题拆解与经典模型实战大秘笈)
数据结构·c++·学习·算法·macos·dfs·bfs
语戚2 分钟前
力扣 2463. 最小移动总距离 —— 动态规划 & 贪心排序全解(Java 实现)
java·算法·leetcode·贪心算法·动态规划·力扣·dp
tankeven4 分钟前
动态规划专题(05):区间动态规划实践(乘法游戏)
c++·算法·动态规划
人道领域8 分钟前
【LeetCode刷题日记】18.四数之和
算法·leetcode·面试
techdashen8 分钟前
Go 1.25 新特性:Flight Recorder —— 像黑匣子一样捕捉线上 Bug
java·golang·bug
妃衣8 分钟前
Html转word追加篇,关于hr标签分割线的显示
java·html·word
A_QXBlms9 分钟前
企微群发消息技术实现:定时任务+模板消息
java·mybatis·企业微信
小李子呢021111 分钟前
前端八股---axios封装
java·前端·javascript
Omics Pro11 分钟前
斯坦福:强化学习生物约束型虚拟细胞建模
人工智能·深度学习·算法·机器学习·计算机视觉·数据挖掘·数据分析
斌味代码12 分钟前
SpringBoot 实战总结:踩坑与解决方案全记录
java·spring boot·后端