此功能是否正确编写?
当我尝试使用数组中的大量元素(例如1000)运行函数时,似乎出现了问题。
然后它似乎停止了。
int quick_sort(int n, int tablica[],int b, int a)
{
if(a==n-1 || n==0) return;
if(b==n-1)
{
b=0;
a++;
}
if(tablica[b]>tablica[b+1])
{
bufor=tablica[b];
tablica[b]=tablica[b+1];
tablica[b+1]=bufor;
}
b++;
return quick_sort(n,tablica,b,a);
}
答案 0 :(得分:0)
除非小数组未按特定方式进行排序,否则以上代码即使对于小数组也不起作用。它将一个元素与下一个元素进行比较。如果将数组说为{4,3,8,7,1}
,则排序将失败,因为它没有将1
推入数组开头的机制。
对于较大的数组,有太多的递归,并且程序达到堆栈限制,并且仅会失败。
您可以在快速排序中使用递归,但是必须检查递归的数量。例如,对于大小为1000的数组,您不需要递归超过1000。示例:
void swap(int* a, int* b)
{
int t = *a;
*a = *b;
*b = t;
}
void quicksort(int arr[], int low, int high)
{
if(low < high)
{
int pivot = arr[high];
int i = (low - 1);
for(int j = low; j <= high - 1; j++)
{
if(arr[j] <= pivot)
{
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
int pi = i + 1;
quicksort(arr, low, pi - 1);
quicksort(arr, pi + 1, high);
}
}
int main()
{
int arr[] = { 7,3,6,1,4,8,9,2 };
int arrsize = sizeof(arr) / sizeof(*arr);
quicksort(arr, 0, arrsize - 1);
for(int i = 0; i < arrsize; i++)
printf("%d\n", arr[i]);
return 0;
}