条件在选择排序中的作用?

时间:2012-07-21 14:13:28

标签: c sorting

通过代码片段中的注释来实现选择排序,下面标记的语句的作用是什么?

int temp, min;

for (i = 0; i <= count - 2; i++) {
    min = i;
    for (int j = i + 1;  j <= count - 1; j++) {
        if (arr[min] > arr[j]) {
            if (arr[i] == arr[min]) {    //What's the significance of this statement?
                temp = arr[min];
                arr[min] = arr[j];
                arr[j] = temp;
            }
        }
    }
}

该陈述的意义何在?是否会有一个输入,这个if条件实际上是重要的?

3 个答案:

答案 0 :(得分:3)

由于您在外部循环中定义了min = i,因此始终满足条件,因此,您可以通过删除条件来优化代码。

在选择排序中,您还可以进行更多优化。每次找到新的最小值时,您都可以找到真正最小值的位置,比如a [pos],然后将其与a [i]交换。而不是交换值。

答案 1 :(得分:2)

你已经在j循环之前定义了min = i;并且在循环内部没有发生i和min值的变化,所以,无论如何,arr [min]将始终等于arr [i],评估条件是否始终为真,因此这些行没有任何作用。删除条件,您的代码将变得更快(如果编译器没有优化代码)。

答案 2 :(得分:0)

  • 变量i从0变为count-1

  • 在i的每个循环中,你想得到位置arr [i]从i到count-1的最小值。要获得[i]的最小值,请执行以下操作:

  • 将min设置为位置i

  • 循环使用变量j从i + 1到count-1

  • 如果[j]小于[min],你想要扫描[min]和[j]。

这样做,在每个循环j结束时,你将在[i]上有一个最小值。