1、测试代码
#include <iostream>
using namespace std;
int g_loop = 0; /* 循环计数 */
int g_move = 0; /* 数据移动次数 */
void output_info(int *buff,int len, int flag)
{
int i;
if(0 == flag)
{
cout << "before: ";
}
else
{
cout << "after: ";
}
for(i = 0; i < 5; ++i)
{
cout << *(buff + i) << " ";
}
cout << endl;
}
int main(void)
{
int buff[]= {10,9,8,7,6};
int i,j;
int temp;
bool b_move = false;
for(i = 0; i < 5 - 1; ++i) // 5个数,冒4次就结束了
{
output_info(buff, 5, 0);
for(j = 0; j < 5 - 1 - i; ++j)
{
++g_loop;
if(buff[j] > buff[j + 1])
{
temp = buff[j];
buff[j] = buff[j + 1];
buff[j + 1] = temp;
++g_move;
b_move = true;
}
}
output_info(buff, 5, 1);
cout << endl;
if(false == b_move)
{
break;
}
}
cout << "move=" << g_move << endl;
cout << "loop=" << g_loop << endl;
return 0;
}
2、最坏情况下循环次数
int buff[5]= {10,9,8,7,6};
3、最好情况下循环次数
int buff[5]= {6,7,8,9,10};
4、算法分析
- 原地排序算法;
- 稳定排序算法;
- 空间复杂度 O(1);
- 时间复杂度 O(n^2)。