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 tmp;
int min_pos; /* 保存最小值位置 */
for(i = 0; i < 5 - 1; ++i)
{
output_info(buff, 5, 0);
min_pos = i;
for(j = i + 1; j < 5; ++j)
{
++g_loop;
if(buff[min_pos] > buff[j])
{
min_pos = j;
}
}
/* 交换 */
if(i != min_pos)
{
tmp = buff[i];
buff[i] = buff[min_pos];
buff[min_pos] = tmp;
++g_move;
}
output_info(buff, 5, 1);
cout << endl;
}
cout << "move=" << g_move << endl;
cout << "loop=" << g_loop << endl;
return 0;
}
2、测试log
4、算法分析
- 原地排序算法;
- 非稳定排序算法;
- 空间复杂度 O(1);
- 时间复杂度 O(n^2)。