1.冒泡排序算法的基本原理
从后往前(或从前往后)两两比较相邻元素的值,若为逆序,则交换它们,直到序列比较完。称这样过程为一趟冒泡排序,最多只需n-1趟排序。
每一趟排序都可以使一个元素移动到最终位置,已经确定最终位置的元素在之后的处理中无需再对比。
如果某一趟排序过程中未发生“交换”,则算法可提前结束。
2.具体算法
//第一部分:排序算法
//9-1 冒泡排序
//2020.09.20
void swap(int *x,int *y)//交换函数
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
void BubleSort(int arr[],int n)
{
int i,j,flag;
for(i=0;i<n-1;i++)//最多只执行n-1轮交换
{
flag = 0;
for(j=1;j<n-i;j++)
{
if(arr[j-1]>arr[j])
{
swap(&arr[j-1],&arr[j]);
flag = 1;//
}
}
if(flag==0)//说明未排序的部分都是有序的 ,算法执行结束
break;
}
}
3.性能分析
空间复杂度:O(1)
时间复杂度:
最好:O(n),有序
最差:O(n2),逆序
平均:O(n2)
稳定性:稳定