一、 经典冒泡排序
void BubbleSort(int arr[], int len)
{
int tmp = 0;
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
二、 优化前面
如某一趟没进行数据交换,说明前面排序完,整个算法排序完毕
例如{1,2,3,4,5,7,8,9,6}
void BubbleSort(int arr[], int len)
{
int tmp = 0;
for (int i = 0; i < len - 1; i++)
{
int flag = 0;
for (int j = 0; j < len - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 1;
}
}
if (flag == 0)
{
return;
}
}
}
三、 优化后面
冒泡每次冒出的泡都是当前最大的数。
优化前面的基础上,记录没数据交换时位置pos,后面数据不再交换。
例如{3,2,5,4,6,7,8,9,10}
void BubbleSort(int arr[], int len)
{
int tmp = 0;
int flag = 0;
int pos = 0;
int k = len - 1;
for (int i = 0; i < len - 1; i++)
{
pos = 0;
flag = 0;
for (int j = 0; j < k; j++)
{
if (arr[j] > arr[j + 1])
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 1;
pos = j;
}
}
if (flag == 0)
{
return;
}
k = pos;
}
}