什么是分区代码错误?

What is error in partition code?

以下代码适用于 Array{ 4 5 3 7 2 },但不适用于 HackerRank 网站上给出的其他测试用例。我的代码有什么错误? 将两个数组 a1[] 和 a2[] 合并到 ar[] 时我做错了吗?

https://www.hackerrank.com/challenges/quicksort1

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <assert.h>
void partition(int ar_size, int *  ar) {
    int a1[100], a2[100];
    int p = ar[0];
    int i=0, j=0 , k=0;
    for(i=0; i<ar_size; i++){
        if(ar[i] < p)
         {
            a1[j] = ar[i];
            j++;
        }      
        else if(ar[i] >= p){
            a2[k] = ar[i];
            k++;
        }            
    }

    i=0, j=0 , k=0;

    while(a1[i]){
        ar[i] = a1[j];
        i++;
        j++;
    }
    while(a2[k]){
        ar[i] = a2[k];
        i++;
        k++;
    }

    for(i=0; i<ar_size; i++){
        printf("%d ", ar[i]);          
    }

}
int main(void) {

   int _ar_size;
scanf("%d", &_ar_size);
int _ar[_ar_size], _ar_i;
for(_ar_i = 0; _ar_i < _ar_size; _ar_i++) { 
   scanf("%d", &_ar[_ar_i]); 
}

partition(_ar_size, _ar);

   return 0;
}
 int _ar_size;
scanf("%d", &_ar_size);
int _ar[_ar_size], _ar_i;

你不能用未知数初始化数组,当你初始化一个变量或数组时..你应该知道需要多少(如果你不知道你需要的大小,只需用一个大数字初始化数组或使用链表) 因为pc什么的应该知道他会在内存中分配多少。

删除 i=0, j=0 , k=0;以及接下来的内容,并尝试以下

while(k--){
    ar[k+j] = a2[k];
}
while(j--){
    ar[j] = a1[j];
}