【发布时间】:2020-09-23 11:18:27
【问题描述】:
我有一个公式可以手动执行此操作吗?这段代码肯定会返回正确的迭代次数吗?
int global = 0;
void bubbleSort(int arr[], int n){
if (n == 1)
return;
for (int i = 0; i < n-1; i++){
if (arr[i] > arr[i+1]) {
swap(&arr[i], &arr[i+1]);
}
global++;
}
bubbleSort(arr, n-1);
}
【问题讨论】:
-
它确实返回了正确的数量,因为 global 是一个全局变量,可以从程序中的任何地方访问它并且始终具有正确的值。
-
n(n+1)/2 的计算速度会更快,因为这是您使用该代码将经历的迭代次数。作为奖励,您不必实际对任何内容进行排序。想想看;排序和交换操作与计算该循环的迭代次数和此后的递归无关。
-
只要你在第一次调用排序之前将
global设置为零,并且只要你的代码是单线程的…… -
只是不要使用全局变量。有太多的问题。有一个将本地计数器归零的第二个函数,递归调用实现,同时根据需要递增它,最后返回计数。 但是 那么,正如 WhozCraig 所说……你甚至不需要那个。这个数字是确定的。
-
是的,它确实返回了正确的值。
标签: c algorithm bubble-sort