循环不变用于透视排序

时间:2016-03-21 17:41:11

标签: c

我试图使用循环不变量(使用初始化,维护和终止方法)来确定算法是否正确,以及为它获取断言和后置条件。我有一些东西,但我不确定它是否正确接近它,因为算法中任何一点的某个值的输出存在不确定性(mid取决于arr [sweep]

int partition(int arr[], int first, int last) {
    int mid = first;
    int pivot = arr[first];
     for (int sweep = first+1; sweep <= last; sweep++) {
        // Assertion: . . .
        if (arr[sweep] < pivot) {
            int tmp = arr[sweep];
            arr[sweep] = arr[mid+1];
            arr[mid+1] = tmp;
            mid++;
        }
    }   
    // Post: . . .
     arr[first] = arr[mid];
     arr[mid] = pivot;
    return mid;
}

我设法想出了这个:

I:

首先= 0

最后=长度-1

中= 0

L:

在循环开始时,我现​​在是i + 1

首先= 0

最后=长度-1

Sweep = first + 2

中= i +(第一)= i(其中我的值取决于arr [sweep]

Sweep = Last + 1

Mid =(last + 1)+(first)=(last + 1)+(0)= Last + 1(如果所有值都是arr [sweep]

//断言:在每个循环之前mid = first + i其中i是arr [sweep]的次数

//后置条件:arr [first..mid-1]将小于arr [mid], arr [mid + 1 ... last]&gt; ARR [MID]。 Sweep = last + 1.

我是新的循环不变量,我希望我能正确地做到这一点。任何建议都会非常有用。 :)

0 个答案:

没有答案