冒泡排序.cpp
特点:对数据的有序性敏感,一旦排序完成就能停止。
时间复杂度: 最优:O(n) 最差:O(n^2)
解读:冒泡算法核心点在于 flag 。可以提前结束排序,若没有这个标志位 ,这个算法没有任何优点。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
// 待排序数组
int arr[9]={3,5,2,6,7,8,1,4,0};
int len = sizeof(arr)/sizeof(arr[0]); //数组长度
// 排序前状态
cout << "排序前:" << endl;
for (int i = 0; i < len; i++)
{
cout << arr[i] << endl;
}
// 排序过程
bool flag = true; //冒泡特点 标志位
for (int i = len - 1; i > 0 && flag; i--)
{
flag = false; //置假
for (int j = 0; j < i; j++)
{
if( arr[j] > arr[j+1] )
{
int t = arr[j+1];
arr[j+1] = arr[j];
arr[j] = t;
flag = true; //如果没有进这个循环则说明前面都是有序的 提前结束排序
}
}
}
// 排序后状态
cout << "排序后:" << endl;
for (int i = 0; i < len; i++)
{
cout << arr[i] << endl;
}
}
函数形式:
void bubble_sort(int* arr,int len)
{
bool flag = true; //冒泡特点 标志位
for(int i=len-1; i>0 && flag; i--) //从最后一位开始
{
flag = false; //置假
for(int j=0; j<i; j++) //从第头开始 到i
{
if(arr[j]>arr[j+1]) //当前为大于后一位则交换 大数放后面位置
{
int t=arr[j+1];
arr[j+1]=arr[j];
arr[j]=t;
flag = true; //如果没有进这个循环则说明前面都是有序的 提前结束排序
}
}
}
本文介绍了C++实现冒泡排序的方法,重点解析了冒泡排序的特点和时间复杂度。冒泡排序对数据有序性敏感,最优情况下时间复杂度为O(n),最坏为O(n^2)。关键在于flag标志位,它能允许算法在数据已排序时提前终止,提高效率。

1467

被折叠的 条评论
为什么被折叠?



