冒泡排序:
算法思想:每一轮的大小比较中,选出最大的数往最后放。我们可以这样理解,假设现有10个数要进行排序,10个数要两两比较,相当于9次,那么假设有n个数,比较轮数就是n-1次,此时已经确定了最外层的循环次数
for(int i=0;i<9;i++)
之后再往下走,要确定每一轮次的比较次数。
以下面十个数字为例进行说明:
8、5、3、2、5、8、4、7、1、9
第一轮次下:
- 8和5进行比较,8>5, 交换顺序,此时:
5、8.........;
- 8和3进行比较,8>3, 交换顺序,此时:
5、3、8.....;
- 8和2进行比较,8>2, 交换顺序,此时:
5、3、2、8.....;
- 8和5进行比较,8>5, 交换顺序,此时:
5、3、2、5、8.....;
- 8和8进行比较,8=8, 不交换顺序,此时:
5、3、2、5、8、8.....;
- 8和4进行比较,8>4, 不交换顺序,此时:
5、3、2、5、4、8、8.....;
- 8和7进行比较,8>7, 交换顺序,此时:
5、3、2、5、4、8、7、8.....;
- 8和1进行比较,8>1, 交换顺序,此时:
5、3、2、5、4、8、7、1、8.....;
- 8和9进行比较,8<9, 不交换顺序,此时:
5、3、2、5、4、8、7、1、8、9.....;
此刻,结束以第一轮次的比较!
第二轮次:
按照上面同理,十个数字中的第二个数开始,一次往后比较。
同样的道理,我们在比较的同时,可以发现,第一轮下,我们比较9次,第二轮下比较8次,总结的规律就是,里层的循环,每次要将外面的轮次减掉。所以代码如下:
for(int i=0;i<9;i++)
for(int j=0;j<9-i;j++)
如此计算,可以得出冒泡排序的时间复杂度为
O(n*n
)
C语言代码如下
#include<stdio.h>
int main()
{
int temp;
int a[10]={8,5,3,2,5,8,4,7,1,9}
for(int i=0;i<9;i++)
for(int j=0;j<9-i;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
for(int i=0;i<10;i++)
{
printf(“%d”,a[i]);
}
}