冒泡排序:也叫作起泡排序
对于n个数据,进行n-1次冒泡,每一次冒泡将最大的或者最小的放到序列的第n个,然后在进行下一次冒泡,下次冒泡将前n-1个数据的最小的,放到n-1的位置上,一次冒泡,知道n-1结束,那么该序列也就有有序了。
例:比如对一个数组含有八个元素分别为:2 5 4 6 9 7 1 8 对其进行排序
则排序的流程为:第一趟:从2向后两两进行比较,将两者中大的放在后面,直到比到最后一位,
最后将9放到最后面,变为 2 4 5 6 7 1 8,对其六个数字比较了5次
第二趟:从2后面两两进行比较,直到比到倒数第二位,即9的前一位,因为就已经确定是最大的了,就不需要在进行比较了,只需要比较4次,这是对于五个数字
然后依次这样后面进行比较即可,直到比较到只剩下第一位了,那就不需要再进行比较了,这个时候序列已经有序了。
规律:对于n个数据,要比较n-1趟,而对于每一趟,比较n-i-1次,i表示第几趟,i从零开始
代码如下:
1.基础版(没有进行任何优化)
void bubble_sort(int arr[], int sz)
{
int i = 0;
int j = 0;
for (i = 0; i < sz - 1; i++)//趟数
{
for (j = 0; j < sz - i - 1; j++)
{
if (arr[j + 1] < arr[j])
{
Swap(arr + j + 1, arr + j);
}
}
}
}
2.进阶版(对冒泡排序进行了优化)
//增加了表示对于冒泡排序,如果有一次没有对序列进行元素交换,那么就说明序列已经有序,那就不需要再进行排序了
void bubble_sort_OP(int arr[], int sz)
{
int i = 0;
int j = 0;
bool flag = true;
for (i = 0; i < sz - 1 && true; i++)//趟数
{
flag = false;
for (j = 0; j < sz - i - 1; j++)
{
if (arr[j + 1] < arr[j])
{
Swap(arr + j + 1, arr + j);
flag = true;
}
}
}
}