基本排序之冒泡排序
冒泡排序:
概述:
1.从首元素开始,依次比较相邻的两个数。
2.如果前一个数大于后一个数,就进行交换,这样就把比较大的数放在了右边的位置上。
3.依次比较,直到最大的数在数组的尾部(即倒数第二个数和倒数第一个数比较完)。
4.重复上述步骤,此时数组尾部为倒数第二个元素。以此类推。
稳定性:
冒泡是个稳定算法。
时间复杂度:
平均时间复杂度为:O(N²)。
因为冒泡排序你始终都要从第一个元素遍历到最后一个元素,进行相邻元素的比较,第一个元素比较N次到达末尾,第二个比较N-1次...
所以总共是N+(N-1)+(N-2)+...+1=(1+N)*N/2,最高项为N²,所以时间复杂度为O(N²).
代码:
#include <iostream>
using namespace std;
//用模板整型和浮点型都可以使用
template<typename T>
void BubbleSort(T array[],int len)
{
if (len < 2)
{
return;
}
int i, j;
//j从数组末尾开始,i一直遍历到j,相邻比较,如果当前大于后一个元素就交换
//遍历一遍后j--,说明最大数已经到了数组末尾,下一次选出次大数放在倒数第二个位置,所以j--
for (j = len - 1; j >= 0; j--)
for (i = 0; i < j; i++)
{
if (array[i] > array[i + 1])
{
int temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
}
int main()
{
int arr[10] = { 2, 4, 1, 1, 3, 7, -9, 7, 8, 8 };
BubbleSort(arr, 10);
for (int i = 0; i < 10; i++)
{
cout << arr[i] << " ";
}
return 0;
}