void px(int* nums, int m, int n)
{
int i = m;
int j = n - 1;
int zero = nums[m];
// 直到 i j 相等
while (i < j)
{
//移动哨兵j
while (i<j && nums[j]>nums[m])
{
j--;
}
//移动哨兵i
while (i < j && nums[i] <= nums[m])
{
i++;
}
// i j 均找到 开始交换;
if (i != j){
nums[i] = nums[i] ^ nums[j];
nums[j] = nums[i] ^ nums[j];
nums[i] = nums[i] ^ nums[j];
}
}
if (i!=m)
{
nums[i] = nums[i] ^ nums[m];
nums[m] = nums[i] ^ nums[m];
nums[i] = nums[i] ^ nums[m];
}
for (int k = 0; k < 10; k++)
{
if (k % 10 == 0) printf("\n");
printf_s("%d ", nums[k]);
}
printf("\n");
//递归调用
if (j - 1 - m > 0) {
px(nums, m, j );
}
if (n - i - 1 > 0) {
px(nums, i + 1, n);
}
}
快速排序是对冒泡排序的改进,里面不会有递归算法调用。快速排序算法参考(文中有多种语言实现的快速排序算法):https://baike.baidu.com/item/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/369842?fr=aladdin
如有帮助,请采纳一下,谢谢。