冒泡排序是两两比较相邻的数字,如果前一个>后一个,则交换他们的值,直到没有反序记录为止。
动画演示:
以数组46,55,13,42,94为例:
#include <stdio.h>
int main(void)
{
int arr[5]={46,55,13,42,94};
for(int i=0;i<5-1;i++)//排序的次数=长度-1
{
for(int j=0;j<5-1-i;j++)//比较的数据。j<长度-1-1(最后一个元素不用比较)
{
if(arr[j]>arr[j+1])
{
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
for(int i=0;i<5;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}
复杂度分析
由上述可得,算法进行了n-1次比较,在没有数据交换的前提下,时间复杂度为O(n)。
当最坏的情况,即待排序的数据是逆序的情况,需要比较次,并做等数量级的记录移动。因此总的时间复杂度为O(N^2)