逻辑实现
- 比较两个相邻的元素。如果第一个比第二个大,就交换;
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样最后元素应该是最大的数;
- 针对所有的元素重复以上的步骤,除了最后一个;
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
代码实现
template<typename T>
void swap(T& a, T& b)
{
T nTmp = a;
a = b;
b = nTmp;
}
void bubblesort(int A[], int n)
{
bool bSort = false;
while (!bSort)
{
bSort = true;
for (int i = 1; i < n; ++i)
{
if (A[i-1] > A[i])
{
swap(A[i-1], A[i]);
bSort = false;
}
}
--n;
}
}
void bubblesort1(int A[], int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n - 1 - i; j++)
{
if(A[j] > A[j+1])
swap(A[j], A[j+1]);
}
}
}
int A[10] = {62, 16, 7, 52, 9, 48, 5, 89, 54, 1};
bubblesort(A, 10);
for (int i = 0; i < n; ++i)
{
printf("%d\t", A[i]);
}
int A[10] = {62, 16, 7, 52, 9, 48, 5, 89, 54, 1};
bubblesort1(A, 10);
for (int i = 0; i < n; ++i)
{
printf("%d\t", A[i]);
}
结果