簡體   English   中英

QuickSort算法比較次數

[英]QuickSort Algorithm Number of Comparisons

我一直在Coursera上課,我們分配了一個作業,用於計算QuickSort在10,000個大小的數組上進行比較的次數。

#include <stdio.h>
#define SIZE 10000

int ComparsionCount = 0;

void swap(int a[], int i, int j) {
        int temp = a[j];
        a[j] = a[i];
        a[i] = temp;
}
int partition(int a[], int l, int r){
        int p = a[l];
        int i = l + 1;
        int j;
        for (j = l + 1; j <= r; j++) {
            if (a[j] < p) {
                swap(a, j, i);
                i++;
            }
        }
        swap(a, l, i - 1);
        return (i - 1);
}
void add(int i) {
    ComparsionCount += i;
}

int QuickSort(int a[], int l, int r){
    int pivot;
    if (r > 1) {
        add(r - 1);
        pivot = partition(a, l, r);
        QuickSort(a, l, pivot - 1);
        QuickSort(a, pivot + 1, r);
    }
    return pivot;
}

int main() {
    FILE *fr;
    int arr[SIZE];
    int i = 0;
    int elapsed_seconds;
    char line[80];

    fr = fopen("QuickSort.txt", "r");
    while (fgets(line, 80, fr) != NULL)
    {
         /* get a line, up to 80 chars from fr.  done if NULL */
         sscanf (line, "%ld", &elapsed_seconds);
         /* convert the string to a int */
         arr[i] = atoi(line);
         i++;
    }
    fclose(fr);  /* close the file prior to exiting the routine */
    printf("%d\n",QuickSort(arr,0,SIZE-1));
}

我遇到了細分錯誤。 我已經確定問題出在QuickSort的兩個遞歸調用中。

我不知道如何解決這個問題,非常感謝您的幫助。

我認為您應該在分區函數中添加如下代碼:

for (j = l + 1; j <= r; j++) {
    count++;
    if (a[j] < p) {
    ...
}

注意: count是一個初始化為0的全局變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM