我试图用指针在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 = 2
,a[high_idx] = 2
,pivot = 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);
}
}