欣坚强 2022-03-21 16:23 采纳率: 57.4%
浏览 18
已结题

为什么该题的运行j=r,j的值应该为9,为什么会变成0?

问题

img

疑问
以n=10,数组各值为6 1 2 7 9 3 4 5 10 8为例。当第一次执行quick_select函数时,j的值为9,然而接着进入while循环,执行第一个while循环和if语句后,j的值就变成了0,这是为什么?

img


#include <stdio.h>
#include<stdlib.h>

int quick_select(int a[], int l, int r, int k) {
    int p = rand() % (r - l + 1) + l;
    int x = a[p];
    {int t = a[p]; a[p] = a[r]; a[r] = t;}
    int i = l, j = r;
    while(i < j) {
        while(i < j && a[i] < x) i++;
        if(i < j) {
            a[j] = a[i];
            j--;
        }
        while(i < j && a[j] > x) j--;
        if(i < j) {
            a[i] = a[j];
            i++;
        }
    }
    a[i] = x;
    p = i;
    if(i - l + 1 == k) return a[i];
    if(i - l + 1 < k) return quick_select(a,i+1,r,k-(i-l+1)); //填空
    else return quick_select(a, l, i - 1, k);
}
    
int main()
{
    int a[100];
    int n;
    scanf("%d ",&n);
    for(int i=0;i<n;i++)
    scanf("%d",&a[i]);
    printf("%d\n", quick_select(a, 0, n-1, 5));
    return 0;
}
  • 写回答

1条回答 默认 最新

  • 嵌入式@hxydj 2022-03-21 16:54
    关注

    代码在哪呢?

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月27日
  • 创建了问题 3月21日

悬赏问题

  • ¥15 思科模拟器Router c3600 NM-4E
  • ¥15 岛津txt格式文件转nirs格式
  • ¥15 石墨烯磁表面等离子体
  • ¥15 angular 项目无法启动
  • ¥15 安装wampserver,图标绿色,但是无法进入软件
  • ¥15 C++ MFC 标准库 加密解密解惑
  • ¥15 两条数据合并成一条数据
  • ¥15 Ubuntu虚拟机设置
  • ¥15 comsol三维模型中磁场为什么没有“速度(洛伦兹项)”这一选项
  • ¥15 electron 如何实现自定义安装界面