#include <stdio.h>
void swap(int *i, int *j){
int temp = *i;
*i = *j;
*j = temp;
}
int main(){
int a[10] = {2,1,4,5,6,9,7,8,3,0};
int i,j;
for(i=0;i<10-1;i++){ //n个数要进行n-1趟比较
for(j=0;j<9-i;j++){ //每趟比较n-i次
if(a[j]>a[j+1]) //依次比较两个相邻的数,将小数放在前面,大数放在后面
swap(&a[j],&a[j+1]);
}
}
for (i = 0; i < 10; i++){
printf("%d ", a[i]);
}
return 0;
}
增加标记变量flag来改进:
for(i=0;i<10-1;i++){ //n个数要进行n-1趟比较
int flag = 0;
for(j=0;j<9-i;j++){ //每趟比较n-i次
if(a[j]>a[j+1]){ //依次比较两个相邻的数,将小数放在前面,大数放在后面
swap(&a[j],&a[j+1]);
flag = 1;
}
}
if (flag == 0){ //如果没有交换过元素,则已经有序
return;
}
}
时间复杂度:最好情况O(n),最坏情况O(n^2),平均时间复杂度O(n^2)。
空间复杂度:O(1)。