微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[C语言学习]----冒泡排序

目录

1.什么是冒泡排序(Bubble Sort)

2.冒泡排序的原理

3.冒泡排序的实现


1.什么是冒泡排序(Bubble Sort)

冒泡排序是依次比较两个相邻的元素,如果顺序(如从大到小)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。 

2.冒泡排序的原理

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

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

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

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

3.冒泡排序的实现

冒泡排序的思想就是两两相邻的元素相互比较,两两交换

例如将一组数据从小到大排序:

进行一趟冒泡排序

 我们可以看到最大元素9到了最后面,一趟冒泡排序可以搞定1个数字的位置

如果是N个元素,最坏的情况下也需要N-1趟冒泡排序

所以先求数组的元素个数

int sz = sizeof(arr)/sizeof(arr[0]);

注:在求数组的长度时不能在自定义函数内部去求,数组传参实际上传递的是数组首元素地址而不是整个数组 

冒泡排序进行的趟数

for(i = 0;i < sz-1;i++)
{

}

在进行1趟冒泡排序中,就是两个数字的相互比较

两个元素比较的对数是剩下数字之间两两相比较 = sz-1-i

for(j = 0;j < sz-1-i;j++)
{
    if(arr[j] > arr[j+1])
    {
        int tmp = arr[j];
        arr[j] = arr[j+1];
        arr[j+1] = tmp;
    }
}

 

 总代码实现冒泡排序:
 

#include<stdio.h>
void Bubble_sort(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz - 1; i++)
	{
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
}
void print(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ",arr[i]);
	}
}
int main()
{
	int arr[10] = { 1,2,4,7,8,5,9,6,3,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	Bubble_sort(arr, sz);
	print(arr, sz);
	return 0;
}

 

原文地址:https://www.jb51.cc/wenti/3281077.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐