基本思路
通过比较两个相邻的元素,满足条件则交换元素,若元素个数为n,则比较n-1次。
优化方案
1.假设有十个数据,经过八轮比较后就已经有序了,则就不需要继续排序了。
2.每一次比较都会使某一个数有序,经过n次比较后,有n个元素就已然有序了,所以在下一次比较时,就可以不遍历已然有序的元素。
代码实现
void BubbleSort(int[] num)
{
int lastEnd = num.Length - 1; //实现优化方案.2
int tempIndex = 0; //实现优化方案.2
for (int i = 0; i < num.Length - 1; i++)
{
bool flag = true; //实现优化方案.1
for (int j = 0; j < lastEnd; j++)
{
if (num[j] > num[j + 1])
{
num[j] += num[j + 1];
num[j + 1] = num[j] - num[j + 1];
num[j] -= num[j + 1];
flag = false;
tempIndex = j;
}
}
lastEnd = tempIndex;
if (flag)
return;
}
}
复杂度
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:稳定