C:使用指针实现Quicksort算法

时间:2015-05-29 09:31:16

标签: c algorithm pointers quicksort

我试图用指针在C语言中实现Quicksort算法,但我发现我在函数中遇到问题:

int partition(int *a[], int start, int end, int pivot_idx)

例如,如果我想对3个项目的数组进行排序:

4 3 2

当我在while中输入功能分区时:

while  (a[high_idx]>pivot)

high_idx = 2a[high_idx] = 2pivot = 3,条件2 > 3会产生true,因此执行仍在继续,但不应该是这样的。我认为我应该使用函数malloc来解决问题,但我已经用指针进行了初步尝试,我需要你的帮助。

任何人都可以帮助我吗?

void swap (int **ptr_s1, int **ptr_s2)
{
    int *temp;
    temp=*ptr_s1;
    *ptr_s1=*ptr_s2;
    *ptr_s2=temp;
}

int partition (int *a[], int start, int end, int pivot_idx)
{
    int low_idx=0, high_idx=0;
    int *pivot;

    pivot= a[pivot_idx];
    swap(&a[pivot_idx], &a[start]);
    low_idx=start+1;
    high_idx=end;
    while(low_idx<=high_idx){
        while(a[high_idx]>pivot){
            high_idx--;
        }
        while((a[low_idx]<=pivot)&&(low_idx<=high_idx)){
            low_idx++;
        }
        if(low_idx<high_idx){
            swap(&a[low_idx], &a[high_idx]);
            low_idx++;
            high_idx--;
        }
    }
    swap(&a[high_idx], &a[start]);

    return high_idx;
}

void sort (int *a[], int start, int end)
{
    int pivot_idx, new_pivotidx;
    if(start<end){
        pivot_idx = (start+end)/2;
        new_pivotidx = partition(a, start, end, pivot_idx);
        sort(a, start, new_pivotidx-1);
        sort(a, new_pivotidx+1, end); 
    }
}

0 个答案:

没有答案