什么是分区代码错误?
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];
}
以下代码适用于 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];
}