排序思路:
样例:{22,35,16,9,5,20}
1. 从首位元素开始,前后元素相比较,保证“小在前、大在后”。逐个元素向后递推。一遍结束后,最大元素将位于排序末位。
{22,35,16,9,5,20}
{22,16,35,9,5,20}(16<->35)
{22,16,9,35,5,20}(9<->35)
{22,16,9,5,35,20}(5<->35)
{22,16,9,5,20,35}(20<->35)
结果:{22,16,9,5,20,35}
2. 因为最大元素已经排位完毕,所以不考虑末位最大元素,从头开始,再做一轮排序。
排序范围:{22,16,9,5,20}
结果: {16,9,5,20,22,35}
可以看出,第二大元素已经排至倒数第二位
3.以此类推,继续排序
{16,9,5,20,22,35}
{9,6,16,20,22,35}
{6,9,16,20,22,35}
结果:{6,9,16,20,22,35}
c实现
void int bubbleSort(int array[], int length){
int i,j,tmp;
for(i=0;i<length-1;i++){
for(j=0;j<length-1-i;j++){
if(array[j]>array[j+1]){
tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
}//end-of-for(j)
}//end-of-for(i)
}
该算法时间复杂度为O(n2)
对于已排序数组,时间复杂度最好为O(n),具体优化不再详述。