冒泡排序的基本思想
假设有一个数组,数组的长度为n,那么我们对其比较n-1趟。每趟都比较的时候都把大的值交换位置放到前面去(倒叙放到前面的是大的值,小的反之)。
那么我们需要比较n * n-1次
所以算法的时间复杂度为 O(n^2)
代码编写
使用c++数组实现
#include <iostream>
using namespace std;
void Swap(int* a,int* b);
int Bubble()
{
int arr[] = {2,5,1,10};
int arrSize =sizeof(arr)/ sizeof(int);
for(int i = 0;i<arrSize;i++)
{
for(int j = i+1;j<arrSize;j++)
{
//倒叙
if(arr[i] <= arr[j]){
Swap(arr+i,arr+j);
}
}
}
//打印
for(auto i : arr){
cout << i << endl;
}
return 0;
}
void Swap(int *a,int *b)
{
int t= *a;
*a = *b;
*b = t;
}
使用c++动态数组vector实现
#include <iostream>
#include <vector>
using namespace std;
int Bubble()
{
vector<int>* arr = new vector<int>();
arr->push_back(4);
arr->push_back(5);
arr->push_back(1);
arr->push_back(3);
arr->push_back(10);
for(int i = 0;i<arr->size();i++)
{
for(int j = i+1;j<arr->size();j++)
{
//倒叙
if(arr->at(i) <= arr->at(j)){
swap(arr->at(i),arr->at(j));
}
}
}
//打印
for(int i = 0;i<arr->size();i++){
cout << arr->at(i) << endl;
}
//销毁对象
delete arr;
arr = nullptr;
return 0;
}