今天,我一直在研究用C语言实现Quicksort算法。 我以为我已经完全理解了这个问题,但是经过几次尝试,结果却与我预期的不同。我请求您帮助发现问题,因为我自己找不到问题,我什至尝试查看Internet上的另一种实现并重写我的功能,但没有任何效果。 我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void swap(int *x, int *y)
{
int temp = *y;
*x = *y;
*y = temp;
}
void printArray(int arr[], int size)
{
for(int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int partition(int arr[], int low, int 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]);
return(i+1);
}
void quickSort(int arr[], int low, int high)
{
if(low < high)
{
int pi = partition(arr, low, high);
quickSort(arr, low, pi-1);
quickSort(arr, pi + 1, high);
}
}
int main()
{
srand(time(NULL));
int arr[10];
for(int i = 0; i < 10; i++)
{
arr[i] = rand()%200 - 100;
}
printArray(arr, 10);
quickSort(arr, 0, 9);
printArray(arr, 10);
return 0;
}
示例性结果:
-57 4 -30 -23 25 -67 83 26 -51 14
-67 -67 -51 -67 -51 -51 14 -51 14 14