繁体   English   中英

在 C 语言的数组中的 2 个整数之间不进行交换

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM