目录
1.什么是冒泡排序(Bubble Sort)
冒泡排序是依次比较两个相邻的元素,如果顺序(如从大到小)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
2.冒泡排序的原理
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 举报,一经查实,本站将立刻删除。