实在是想感叹一下,因为一个很简单的东西,自己在网上找了半天反而弄的很复杂,逻辑性太强,小白实在是看不懂。因此,下面是一个最小白的冒泡排序的实现方式。
时间复杂度o(n*n)。
逻辑分析:
依次比较数组中的两个元素,较小的放在前面,较大的放在后面。
重复上面步骤,对,一直重复第一个步骤直到排序完成为止。
实例分析:
输入数组:
9 8 7 6 5 4 3 2 1 0
第一次循环
8 7 6 5 4 3 2 1 0 9
分析一下,怎么久到这儿来的,首先比较9和8,9后移,数组变成8 9 7 6 5 4 3 2 1 0,继续比较9和7,然后9又后移,移呀移,就到最后啦。
第二次循环
7 6 5 4 3 2 1 0 8 9
第三次循环
6 5 4 3 2 1 0 7 8 9
第四次循环
5 4 3 2 1 0 6 7 8 9
第五次循环
4 3 2 1 0 5 6 7 8 9
第六次循环
3 2 1 0 4 5 6 7 8 9
第七次循环
2 1 0 3 4 5 6 7 8 9
第八次循环
1 0 2 3 4 5 6 7 8 9
第九次循环
0 1 2 3 4 5 6 7 8 9
第十次循环
0 1 2 3 4 5 6 7 8 9
#include<iostream>
#include<cstdlib>
using namespace std;
void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
void bubbleSort(int a[], int length)
{
for (int j = 0; j < length - 1; j++)
{
for (int i = 0; i<length - 1; i++)
{
if (a[i] > a[i + 1])
{
swap(a[i], a[i + 1]);
}
}
for (int i = 0; i < 10; i++)
{
cout << a[i] << " ";
}
cout << endl;
}
}
int main()
{
int a[] = { 9,8,7,6,5,4,3,2,1,0 };
bubbleSort(a, 10);
for (int i = 0; i < 10; i++)
{
cout << a[i] << " ";
}
cout << endl;
system("pause");
return 0;
}