鱼C论坛

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

没看懂这段代码啥意思

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

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

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

x
  1. #include <stdio.h>

  2. void quick_sort(int array[], int left, int right)
  3. {
  4.         int i = left, j = right;
  5.         int temp;
  6.         int pivot;
  7.        
  8.         pivot = array[(left + right) / 2];
  9.        
  10.         while (i <= j)
  11.         {
  12.                 //从左到右找到大于等于基准点的元素
  13.                 while (array[i] < pivot)
  14.                 {
  15.                         i++;
  16.                 }
  17.                 //从右到左找到小于等于基准点的元素
  18.                 while (array[j] > pivot)
  19.                 {
  20.                         j--;
  21.                 }
  22.                 //如果i <= j,则互换
  23.                 if (i <= j)
  24.                 {
  25.                         temp = array[i];
  26.                         array[i] = array[j];
  27.                         array[j] = temp;
  28.                         i++;
  29.                         j++;
  30.                 }
  31.         }
  32.        
  33.         if (left < j)
  34.         {
  35.                 quick_sort(array, left, j);
  36.         }
  37.        
  38.         if (i < right)
  39.         {
  40.                 quick_sort(array, i, right);
  41.         }
  42. }
  43.        
  44. int main (void)
  45. {
  46.         int array[] = {73, 108, 111, 118, 101, 70, 105, 115, 105, 67, 46, 99, 111, 109}        ;
  47.         int i, length;
  48.        
  49.         length = sizeof(array) / sizeof(array[0]);
  50.         quick_sort(array, -, length-1);
  51.        
  52.         return 0;
  53. }
复制代码



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

使用道具 举报

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

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

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

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

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

  6. int main() {
  7.     int array[] = {4, 2, 8, 5, 1};
  8.     int size = sizeof(array) / sizeof(array[0]);
  9.   
  10.     quick_sort_driver(array, size);
  11.   
  12.     // 打印排序后的数组
  13.     for (int i = 0; i < size; i++) {
  14.         printf("%d ", array[i]);
  15.     }
  16.   
  17.     return 0;
  18. }
复制代码


这样,你就可以使用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-5-12 07:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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