冒泡排序——C语言(冒泡排序c语言什么意思)

冒泡排序的图示:

假设有一个数组 [5, 3, 8, 6, 2],逐步冒泡排序的过程:

  • 第一轮
    • 比较 5 和 3,5 > 3,交换 → [3, 5, 8, 6, 2]
    • 比较 5 和 8,5 < 8,不交换 → [3, 5, 8, 6, 2]
    • 比较 8 和 6,8 > 6,交换 → [3, 5, 6, 8, 2]
    • 比较 8 和 2,8 > 2,交换 → [3, 5, 6, 2, 8] (8 冒泡到最后)
  • 第二轮
    • 比较 3 和 5,3 < 5,不交换 → [3, 5, 6, 2, 8]
    • 比较 5 和 6,5 < 6,不交换 → [3, 5, 6, 2, 8]
    • 比较 6 和 2,6 > 2,交换 → [3, 5, 2, 6, 8] (6 冒泡到倒数第二位)
  • 第三轮
    • 比较 3 和 5,3 < 5,不交换 → [3, 5, 2, 6, 8]
    • 比较 5 和 2,5 > 2,交换 → [3, 2, 5, 6, 8] (5 冒泡到倒数第三位)
  • 第四轮
    • 比较 3 和 2,3 > 2,交换 → [2, 3, 5, 6, 8]
  • 结束
    • 数组已经有序,排序完成。


由此可知,5个数总共经历了4轮,而每一轮需要迭代的次数(即元素交换操作)每经过一轮累计减少一次

所以以轮数外层循环(总共需要几轮完成),次数内层循环(代表每轮需要交换操作的次数)。

#include <stdio.h>
void BubbleSort(int* arr,int arrLen);

int main()
{
	//一维数组冒泡排序法
	int arr[] = { 5, 3, 8, 6, 2 };
	int arrLen = sizeof(arr) / sizeof(arr + 1);
	BubbleSort(arr,arrLen);
	return 0;
}

void BubbleSort(int *arr,int arrLen) {
	//冒泡排序过程:
	//	比较相邻元素;将数组中最大或最小的元素通过相邻元素之间的比较排到最后
	//	重复步骤;
	//	循环终止。
	
	for (int i = 0; i < arrLen - 1; i++) //轮数
	{
		for (int j = 0; j < arrLen - 1 - i; j++)//每轮迭代次数
		{
			int tmp = 0;
			if (arr[j] > arr[j + 1])//元素交换
			{
				tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}

		}
	}
		
	//打印结果
	for (int i = 0; i < arrLen; i++)
	{
		printf("%d,", arr[i]);
	}

	}

相关文章

C语言排序方法——冒泡排序详解!你学会了吗?

冒泡排序法的基本思路为:每次将相邻的两个数比较,将小的调在前面。举个例子,如果有6个数:9,8,5,4,2,0。第一次先将最前面的两个数9和8对调。第二次将第2个数和第3个数对调(9和5)······...

冒泡排序(冒泡排序python)

冒泡排序(Bubble Sort)是一种简单的排序算法,其基本思想是对待排序的元素从前向后依次比较相邻的两个元素,如果顺序不对则交换它们的位置,轮比较下来,最大的元素就会“冒泡”到数组的末尾重复这个过...

基于C语言的冒泡排序法(c语言冒泡排序思路)

冒泡排序法:对数组中的n个整数类型的数据元素(a[0]~a[n-1])进行排序。void BubbleSort(int a[],int n){ int i,j,flag=1; int temp; fo...

一文透彻解析冒泡排序(冒泡排序有几种方法)

谈一谈冒泡排序看到很多人谈算法题,上来就是一段代码,你去看去吧,自己悟去吧。心塞有的题目老长时间就是不理解。。。本文分析一下啥是冒泡排序?排序就是一组数字,按照顺序排列(从小到大) ,冒泡排序是排序的...

常见的三种排序(冒泡排序、插入排序、选择排序)

冒泡排序什么是冒泡排序?百度百科解释:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要...