标签:空间复杂度 array 思路 std str 记录 时间 move flag
用随机函数生成16个2位正整数(10~99),利用冒泡排序法将其排序。
每一趟排序通过无序序列中元素的比较和交换位置,将无序序列中最大的元素移到最后,将其更新为有序序列中的最小元素。
1.引入一个无序序列
2.第一趟
3.第二趟
4.第三趟
5.(省略n步)最后一趟
所以时间复杂度为O(n2);
下面的代码是我按照自己的思路进行编写的,算法效率能达到应有的程度。
空间复杂度为O(1),移动时需要辅助空间。
#include<iostream>
#include<ctime>
using namespace std;
void BubbleSort(int* array, int n)
{
//记录比较次数和移动次数
int recordMove = 0;
int recordCompare = 0;
//监视哨
//标记排序是否发生交换
//若不发生交换(为0)
//则排序完成
int flag = 1;
while (flag == 1 && n - 1 > 0)
{
//若没有发生交换
//flag为0,则不会发生下一趟排序
flag = 0;
for (int i = 1; i < n; i++)
{
recordCompare++;
//如果前者大于后者
//进行交换
//监视哨置1
if (array[i] > array[i + 1])
{
flag = 1;
//array[0]为辅助空间
array[0] = array[i];
recordMove++;
array[i] = array[i + 1];
recordMove++;
array[i + 1] = array[0];
recordMove++;
}
}
//每趟排序后
//下一趟排序的比较次数都-1
n--;
cout << "第" << 16 - n << "趟排序:" << endl;
for (int j = 1; j <= 16; j++)
{
if (j == n + 1) cout << "[ ";
cout << array[j] << " ";
if (j == 16) cout << "]";
}
cout << endl << endl;
}
cout << "比较次数:" << recordCompare << endl;
cout << "移动次数:" << recordMove << endl << endl;
}
int main()
{
//生成随机16个正整数
int positiveInteger[17];
time_t t;
srand((unsigned)time(&t));
cout << "生成16个2位正整数:" << endl;
for (int i = 1; i <= 16; i++)
{
positiveInteger[i] = (rand() % (100 - 10)) + 10;
cout << positiveInteger[i] << " ";
}
cout << endl << endl;
//冒泡排序
BubbleSort(positiveInteger, 16);
cout << "排序后数组:" << endl;
for (int i = 1; i <= 16; i++)
{
cout << positiveInteger[i] << " ";
}
cout << endl << endl;
system("pause");
return 0;
}
标签:空间复杂度 array 思路 std str 记录 时间 move flag
原文地址:https://www.cnblogs.com/wasi-991017/p/11959027.html