您的位置:首页 > 其它

[Sort]冒泡排序

2015-11-29 11:15 295 查看
#include <iostream>

using namespace std;

/*
* C - compare times
* M - move times
*
* 如果是正序的,一趟扫描即可完成排序,所需的关键字比较次数C和记录移动次数M均达到最小值
* Cmin = n-1 , Mmin = 0;
* 即冒泡排序最好的时间复杂度是 O(n)
*
* 如果初始文件是反序的,需要进行n-1趟排序。每趟排序需要进行n-i次关键字比较,且每次比较都必须
* 移动记录三次来达到交换记录位置,在这种情况下,比较和移动次数均达到最大值。
*
* Cmax = n(n-1)/2 = O(n^2);
* Mmax = 3n(n-1)/2 = O(n^2);
* 冒泡排序最坏的时间复杂度是O(n^2)
*
* 综上,冒泡排序的平均复杂度是O(n^2)
*
* 冒泡排序是稳定的排序,相等的数值的前后顺序保持一致。
*/

void BubbleSort(int nums[], int n)
{
int i, j = 0;
for(i = 0; i < n-1; i++)
{
for(j = 0; j < n-i-1; j++)
{
if(nums[j] > nums[j+1])
{
swap(nums[j],nums[j+1]);
}
}
}
}

void print(int nums[], int n)
{
for(int i = 0; i < n; i++)
{
cout<<nums[i]<<endl;
}
}

int main()
{
int nums[10] = {10,44,22,47,88,43,55,99,64,109};
BubbleSort(nums,10);
print(nums,10);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  冒泡排序