我开始学习如何在c中编码。 目前,我正在尝试实现一个显示与此类似的输出的程序:
{ 欢迎来到CSE分拣系统
请输入您的大小数组:
请选择以下排序算法之一:
1 - 冒泡排序
2 - 插入排序
3 - 选择排序
4 - 快速排序
您的选择:
您的数组已使用选择排序x步骤进行排序。
排序后的数组:}
我的程序大部分已完成,但我无法确定如何计算排序过程中使用的x步数。如何推断算法使用的“步骤”数量?
答案 0 :(得分:0)
这听起来像一个有趣但有些具有挑战性的问题。 “步骤”本身就很抽象。
说我有一些任意排序功能:
void lameSort(int* array, int length) {
int i;
for (i = 0; i < length; ++i) {
if (array[i] == 5) {
int tmp = array[i];
array[i] = array[i - 1];
array[i - 1] = tmp;
}
}
}
你究竟要定义一个“步骤”是什么?你可以说
初始化索引= 1步
将每个数组元素与5 = n步(数组长度)进行比较
初始化临时变量= 1步
......等
你必须以某种方式记住每个“步骤”。
而且,人们通常不会根据确切的步骤来衡量算法的复杂性。它们用Big-O表示法表示运行时间/存储复杂度,最高阶多项式是运行时间。
答案 1 :(得分:0)
通过简单地计算每个程序执行的指令总数,无法比较程序的复杂性。您需要渐近分析,摊销分析等来分析算法的复杂性。在渐近分析中,分析了算法的限制行为。
限制行为仅对n≥n 0 有效。快速排序的渐近Big-O复杂度 O(n log n)小于冒泡排序的复杂度 O(n 2 )。但是对于n
答案 2 :(得分:0)