基本思想
相邻的两个元素进行比较,按照要求进行交换
思路:(以升序为例)
进行第一趟排序,第一个元素和第二个元素进行比较,将较大的放在第二个元素的位置上
然后第二个和第三个元素进行比较,将较大的放在第三个元素的位置上...依次类推,直到
第一趟排序结束,最大的元素就在最后一个位置
然后进行第二趟排序,第一个元素和第二个元素进行比较,将较大的放在第二个元素的位置
上然后第二个和第三个元素进行比较,将较大的放在第三个元素的位置上。。依次类推,直
到第二趟排序结束,第二大的元素就在倒数第二个位置上了。。
依次类推,直到整个数据有序
冒泡排序动图
![](https://img-blog.csdnimg.cn/75225b3adba74cc8889b1f7f24391186.gif)
冒泡排序的时间复杂度
O(n^2)
冒泡排序代码实现
//冒泡排序
#include <stdio.h>
int main()
{
int num[10] = {1,3,4,10,23,55,12,32,99,6};
int i = 0;
int j = 0;
int temp = 0;
int len = sizeof(num)/sizeof(num[0]);
//此处len-1是最后一趟只有一个元素不用排序
for(i=0;i<len-1;i++)
{
//此处len-1是防止数组越界访问
//len-j 是因为每趟都可以少一个元素参与比较
for(j=0;j<len-i-1;j++)
{
if(num[j] > num[j+1])//如果是降序 将此处的 > 改成 < 即可
{
temp = num[j+1];
num[j+1] = num[j];
num[j] = temp;
}
}
}
for(i=0;i<len;i++)
{
printf("%d ",num[i]);
}
printf("\n");
return 0;
}