【发布时间】:2019-07-11 04:18:21
【问题描述】:
我是 C 新手,我正在从 coursera 学习算法,在这里我正在尝试实现 3 路快速排序,我知道我遇到了错误的内存错误,它发生在数组第一次排序之后.
我在这里附上我的代码和 coursera 讲师使用的 java 代码页面,任何更改错误的建议都将不胜感激。
#include <stdio.h>
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void quicksort(int arr[],int low, int high)
{
if(high<=low)
return;
int lt = low;
int gt = high;
int pivot = low;
int i = low;
while(i<=gt)
{
if(arr[i]==arr[pivot])
i++;
else if(arr[i]<arr[pivot])
{
swap(&arr[i],&arr[lt]);
i++;
lt++;
}
else
{
swap(&arr[i],&arr[gt]);
gt++;
}
}
quicksort(arr,low,lt-1);
quicksort(arr,gt+1,high);
}
void printArray(int arr[], int size)
{
int i;
for (i=0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
int main()
{
int arr[] = {5,1,2,8,7,5,5,6,5,4,5,3,9,10};
int n = sizeof(arr)/sizeof(arr[0]);
quicksort(arr, 0, n-1);
printf("Sorted array: ");
printArray(arr,n);
return 0;
}
我附上coursera讲师java代码的图片 Java code
【问题讨论】:
-
要学习编程,如果不学习如何使用调试器就无法继续。调试器会准确地告诉你发生内存错误的语句,你可以看到哪个变量是罪魁祸首。
-
@johnelemans,我是 macbook 和 xcode 的新手,我不会找借口,但是,我会接受您的反馈并将继续努力。非常感谢您的评论。
标签: c algorithm sorting quicksort