鱼C论坛

 找回密码
 立即注册
查看: 746|回复: 3

没看懂这段代码啥意思

[复制链接]
发表于 2024-2-22 19:59:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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[i] < pivot)
                {
                        i++;
                }
                //从右到左找到小于等于基准点的元素
                while (array[j] > pivot)
                {
                        j--;
                }
                //如果i <= j,则互换
                if (i <= j)
                {
                        temp = array[i];
                        array[i] = array[j];
                        array[j] = 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[0]);
        quick_sort(array, -, length-1);
        
        return 0;
}


没看懂这段代码啥意思,有没有高人能不能一行行解释下?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-2-22 19:59:28 | 显示全部楼层
这段代码是实现快速排序算法的函数。快速排序是一种常用的排序算法,它使用了分治的思想。

简单解释一下这段代码的作用:
- 函数名为quick_sort,接受一个可变数组array、左边界left和右边界right作为参数。
- 首先定义两个指针i和j,分别指向左边界和右边界。
- 使用数组的第一个元素作为基准值(pivot)。
- 进入一个循环,循环条件是i小于j:
  - 在循环中,首先从右往左找到第一个小于基准值的元素,并将其下标赋值给j。如果找到了,就退出循环。
  - 然后从左往右找到第一个大于基准值的元素,并将其下标赋值给i。如果找到了,就退出循环。
  - 接着交换array[i]和array[j]的值,将小于基准值的元素放到左边,大于基准值的元素放到右边。
- 当i和j相遇时,说明一轮排序结束。此时将基准值与array[i]交换。
- 然后递归调用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[0]);
  
    quick_sort_driver(array, size);
  
    // 打印排序后的数组
    for (int i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }
  
    return 0;
}

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢,刚开始学C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 18:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表