关键知识点
1、无序数组,个数为n(包含正/负数)
2、遍历数组,将最大或者最小交换到数组末尾(每次冒泡结束,最大或者最小值就是最后一个成员,然后排除这个最大/最小的数,对剩下的数据进行下一轮冒泡处理)
3、如果数组成员个数为n,那么冒泡的轮数为n-1
4、时间复杂度O(n2)
C语言代码实现
void bubble_sort(int arry[], int num)
{
#定义实际冒泡的轮数
int rounds = 0;
#记录本轮冒泡是否进行了数据交换,属于优化点
int change = 0;
int i,j;
int tmp;
for (i=0; i<num-1; i++) { //有num个成员,冒泡轮数num-1
change = 0;
for (j=0; j<num-i-1; j++) {
if (arry[j] < arry[j+1]) { //降序
tmp = arry[j];
arry[j] = arry[j+1];
arry[j+1] = tmp;
change = 1;
}
}
if (change == 0) {
break;
}
rounds++; //用于调试打印
}
printf("Total rounds are %d.\n", rounds);
}
int main(void)
{
int testarry[] = {100,23,19,2,14,-1,-3,99,25,10};
int len = sizeof(testarry)/sizeof(testarry[0]);
int i;
printf("++++++++++排序前:\n");
for (i=0; i<len; i++) {
printf("%d ", testarry[i]);
}
printf("\n");
bubble_sort(testarry, len);
printf("-----------排序后:\n");
for (i=0; i<len; i++) {
printf("%d ", testarry[i]);
}
printf("\n");
return 0;
}