[英]Swap is not done between 2 integers in array in C language
我正在用 C 语言实现快速排序算法,其中只有一个特定的 2 个值arr[i] and pivot
交换没有正确完成,否则所有交换都准确完成,我也调试过并试图了解什么是问题/错误,也许是逻辑错误。
这是代码:
#include <stdio.h>
void printArr(int arr[], int n)
{
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
}
void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void quickSort(int arr[], int low, int high)
{
int pvt = arr[high];
int i = low;
int j = high;
while (i < j)
{
while (pvt > arr[i])
i++;
while (pvt <= arr[j])
j--;
if (i < j)
swap(&arr[i], &arr[j]);
}
swap(&arr[i], &pvt);
printArr(arr, high + 1);
}
void main()
{
int arr[] = {10, 16, 8, 12, 15, 6, 3, 9, 5};
int n = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, n - 1);
}
就在 2-3 分钟后,我的一个朋友帮我解决了,pivot 不在阵列中,所以我用 arr[i] 交换它? 相反,我可以为相同的结果交换 2 个值,arr[i] 和 arr[high]。 搞错了:P
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.