1.冒泡排序的介绍
冒泡排序的核心思想就是:两个相邻的元素进行比较,再根据需要进行排序。
2.冒泡排序的一般实现:
我们以一个有十个整形的数组为例,从小到大对数组的元素进行排序。
#include <stdio.h>
void bubble(int arr[], int sz)
{
int i, j;
for (i = 0; i < sz - 1; i++)
{
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j+1])
{
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
int main()
{
int arr[10] = { 4,8,6,2,7,3,5,9,10,1 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble(arr, sz);
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
结果为:
3.冒泡排序的优化:
通过分析我们想到,如果数组在刚开始就已经排好了顺序,那么我们的代码就会进行无用的操作,因此我们假设初始数组是有序的,再进行排序,就得到了优化过的代码,如下:
#include <stdio.h>
void bubble(int arr[], int sz)
{
int i, j;
for (i = 0; i < sz - 1; i++)
{
int flag = 1;
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
flag = 0;
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
if (flag == 1)
break;
}
}
int main()
{
int arr[10] = { 4,8,6,2,7,3,5,9,10,1 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble(arr, sz);
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
结果同样是: