写出三个函数:
第一个是交换数组中的两个数,利用*(nums+i)
第二个是返回一个数组,第一个是小于区的最后一个数,第二个是大于区的第一个数
第三个是递归算法,递归实现快速排序,并注明截止条件。
void swap(int* nums, int i, int j) {
int temp = *(nums + i);
*(nums + i) = *(nums + j);
*(nums + j) = temp;
}
int* partition(int* nums, int left, int right) {
int* pf = (int*)malloc(sizeof(int)* 2);
int i = left;
int a = nums[right];
while (i <= right) {
if (nums[i] < a) {
swap(nums, i, left);
left++;
i++;
}
else if (nums[i] == a) {
i++;
}
else if (nums[i] > a) {
swap(nums, i, right);
right--;
}
}
* (pf + 1) = i--;
while (nums[i]==a)i--;
*(pf) = i;
return pf;
}
void quicksort(int* nums, int left, int right) {
int* pf = NULL;
if (left >= right) {
return;
}
pf = partition(nums,left,right);
quicksort(nums, left,*(pf));
quicksort(nums, *(pf + 1), right);
free(pf);
pf = NULL;
}