冒泡排序
冒泡排序也被称为起泡排序,该排序算法的原理就是经过一系列的交换实现的,也就是用第一个元素和第二个元素进行比较,如果第一个元素的值大于第二个元素则两者位置互换,否则不交换。然后第二个元素和第三个元素比较.......最后序列中最大的元素被交换到了序列的尾部,这样就完成了一轮交换,经过n轮交换之后,就可以得到一个有序序列。
当然,除了从左向右交换的方案外,另外一种冒泡排序就是重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置”这一操作的算法,也就是从右往左交换。在这个过程中,数字会像泡泡一样,慢慢从右往左“浮”到序列的顶端,所以这个算法才被称为“冒泡排序”。
// 冒泡排序,指的是元素两两之间进行比较交换,需要比较n轮,每轮需要比较m次,从左向右升序
void BubbleSort(int buf[], int bufsize)
{
int temp = 0; ////为了临时存储交换值
for (int n = 1; n < bufsize; n++) //.循环比较元素,需要比较n轮
{
for (int m = 0; m < bufsize - n; m++) /// 每轮需要比较m次
{ // 数组元素两两之间进行比较交换 buf[0]buf[1] buf[1] buf[2]
if (buf[m] > buf[m + 1])
{
temp = buf[m]; // 备份前一个
buf[m] = buf[m + 1]; // 把后面交换到前面
buf[m + 1] = temp; // 把前面交换到后面
}
}
}
}
例如 有一个数组 [8] [9] [5] [4] [1]
则需要比较n轮需要比较4轮
[8] [9] [5] [4] [1]
每轮需要比较5-n 轮