小鸭不学习 发表于 2024-2-22 19:59:08

没看懂这段代码啥意思

#include <stdio.h>

void quick_sort(int array[], int left, int right)
{
        int i = left, j = right;
        int temp;
        int pivot;
       
        pivot = array[(left + right) / 2];
       
        while (i <= j)
        {
                //从左到右找到大于等于基准点的元素
                while (array < pivot)
                {
                        i++;
                }
                //从右到左找到小于等于基准点的元素
                while (array > pivot)
                {
                        j--;
                }
                //如果i <= j,则互换
                if (i <= j)
                {
                        temp = array;
                        array = array;
                        array = temp;
                        i++;
                        j++;
                }
        }
       
        if (left < j)
        {
                quick_sort(array, left, j);
        }
       
        if (i < right)
        {
                quick_sort(array, i, right);
        }
}
       
int main (void)
{
        int array[] = {73, 108, 111, 118, 101, 70, 105, 115, 105, 67, 46, 99, 111, 109}        ;
        int i, length;
       
        length = sizeof(array) / sizeof(array);
        quick_sort(array, -, length-1);
       
        return 0;
}


没看懂这段代码啥意思,有没有高人能不能一行行解释下?

FishC 发表于 2024-2-22 19:59:28

这段代码是实现快速排序算法的函数。快速排序是一种常用的排序算法,它使用了分治的思想。

简单解释一下这段代码的作用:
- 函数名为quick_sort,接受一个可变数组array、左边界left和右边界right作为参数。
- 首先定义两个指针i和j,分别指向左边界和右边界。
- 使用数组的第一个元素作为基准值(pivot)。
- 进入一个循环,循环条件是i小于j:
- 在循环中,首先从右往左找到第一个小于基准值的元素,并将其下标赋值给j。如果找到了,就退出循环。
- 然后从左往右找到第一个大于基准值的元素,并将其下标赋值给i。如果找到了,就退出循环。
- 接着交换array和array的值,将小于基准值的元素放到左边,大于基准值的元素放到右边。
- 当i和j相遇时,说明一轮排序结束。此时将基准值与array交换。
- 然后递归调用quick_sort函数通过上述步骤对基准值左边和右边的子数组进行排序。

虽然这段代码只是实现了快速排序算法的一部分,但它是快速排序算法的核心部分。如果你想要完整的实现快速排序算法,请实现一个快速排序的驱动函数,在其中调用quick_sort函数,传入正确的参数即可。例如:

void quick_sort(int array[], int left, int right);

// 快速排序的驱动函数
void quick_sort_driver(int array[], int size) {
    quick_sort(array, 0, size - 1);
}

int main() {
    int array[] = {4, 2, 8, 5, 1};
    int size = sizeof(array) / sizeof(array);

    quick_sort_driver(array, size);

    // 打印排序后的数组
    for (int i = 0; i < size; i++) {
      printf("%d ", array);
    }

    return 0;
}

这样,你就可以使用main函数中的代码来测试快速排序算法了。希望能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

tommyyu 发表于 2024-2-23 10:50:58

这是实现快速排序算法的,建议去网上找玩相关的教程之后再来看代码。
我找到的几个教程:
https://zhuanlan.zhihu.com/p/102290441
https://www.runoob.com/w3cnote/quick-sort.html
https://zhuanlan.zhihu.com/p/123416868

小鸭不学习 发表于 2024-2-23 19:39:12

tommyyu 发表于 2024-2-23 10:50
这是实现快速排序算法的,建议去网上找玩相关的教程之后再来看代码。
我找到的几个教程:
https://zhuanl ...

感谢,刚开始学C
页: [1]
查看完整版本: 没看懂这段代码啥意思