2015-05-25 2 views
-2

Ниже код работает для 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; 
} 
+0

Вы пытались запустить его с помощью различных тестовых стен самостоятельно? –

+0

Я пробовал со многими делами. Это дает разные и неудобные результаты. Это дает правильный ответ для Array {4 5 3 7 2}. – Kikit

+0

количество элементов '1≤n≤1000' – BLUEPIXY

ответ

0

Удалить i = 0, j = 0, k = 0; и что следует ниже, и попробуйте следующее:

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

Да. Работает. Большое спасибо. – Kikit

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

Вы не можете инициализировать массив с неизвестным числом, при инициализации переменной или массив .. Вы должны знать, сколько потребуется (если вы не знаете размер вам просто выполните инициализацию массива с большим числом или используйте связанный список) , потому что компьютер или что-то должно знать, сколько он выделит в памяти.

+0

Нет проблем с основной функцией. Это код по умолчанию, написанный в редакторе кода HackerRank. – Kikit

+0

какие 'ar1' и' ar2' содержат? , если они не содержат ничего, как вы дали значение другому массиву? – cip

+2

, если вы использовали 'c90', вы получите' error: ISO C90 запрещает массив переменной длины _ar', используя 'gcc -std = c90 -pedantic -Wall -Werror -os sc', но' c99' отлично работает с помощью 'gcc -std = c99 -pedantic -Wall -Werror -os sc' – houssam