2014-03-24 3 views
1

나는 수업을 위해 일하고 있습니다. 우리는 포인터를 사용하고 있습니다. 우리는 (malloc을 사용하여) 사용자가 결정한 요소의 수를 가진 배열을 생성해야했습니다. 나는 그 부분을 모두 작동 시켰습니다. 두 번째로 배열을 내림차순으로 정렬해야했습니다. 나는 왜 이것이 작동하지 않는지 전혀 모른다. 이 코드는 전체 배열을 뒤집어서 3 4 5 12 5가 5 12 5 4 3이되도록 만들지 만, 원하는 것은 아닙니다. 나는 그것이 작은 무엇인가 확실하다. 그러나 나의 인생 동안 나는 내가 무엇을 잘못하고 있는지에 관해 계산할 수 없다.C에서 배열을 정렬하는 데 포인터를 사용하는 데 문제가 있습니다

void main() 
{ 
    int *p, *sizearray, *q; 
    int i, siz; 
    printf("How large do you want the array? Enter a number between 0 and 50\n"); 
    scanf("%d", &siz); 
    if (siz <= 50) 
    { 
     p = genarr(siz); 
     for (i = 0; i <siz; i++) 
      printf("%i\n", *(p + i)); 

     arrsort(p,siz); 

     for (i = 0; i <siz; i++) 
      printf("%i\n", *(p + i)); 
    } 
    else 
     printf("That number was not in the given range"); 

    while(1); 
} 




#include "stdafx.h" 
#include <time.h>   // required for the time_t structure 
#include <stdlib.h>   // Reqwuired for the srand() and rand() functions 
#include "ArrEdit.h" 

int* genarr(int size) 
{ 
    time_t t; 
    int i, m; 
    int *sizearr; 

    sizearr = (int*)malloc(sizeof(int)*size); 
    srand((unsigned)time(&t)); 

    for (i = 0; i<size; i++) 
     *(sizearr + i) = rand() % 50; 

    return sizearr; 
    free(sizearr); 
} 


int *arrsort(int*prt, int si) 
{ 
    int k, j; 
    int temp; // holding variable 
    for (k = 0; k< (si - 1); k++) // element to be compared 
    for (j = (k + 1); j < si; j++) // rest of the elements 
    { 

     swap(&prt[k], &prt[j]); 
    } 
    return prt; 
} 

void swap(int *s, int *r) 
{ 
     int pSwap = *r; 
     *r = *s; 
     *s = pSwap; 

} 
+0

요소가 이미 순서대로 있는지 확인하고,이 코드는 수행하지 않을 배열을 역전시키기만하는 것처럼 사용자의 설명이 소리가납니다. –

+1

질문의 일부가 아니지만 무료 (sizearr)입니다. 함수를 이미 종료했기 때문에 호출되지 않습니다. 그러나 어쨌든 포인터를 반환하고 있기 때문에 사용하지 않으려는 메모리가 삭제되므로 해제하지 않으십시오. – IllusiveBrian

+2

내가 틀렸다면 정정 해 주겠지 만 실제로 이것은 유효한 C++ 코드 일 수있는 100 % C 코드처럼 보입니까? –

답변

1
for (j = (k + 1); j < si; j++) // rest of the elements 
{ 

    swap(&prt[k], &prt[j]); 
} 

이해야만을 교환 할 경우 K> J, 당신은 if 문이 필요하므로 :

for (j = (k + 1); j < si; j++) // rest of the elements 
{ 
    if (prt[k] > prt[j]) 
     swap(&prt[k], &prt[j]); 
} 
가 실제로 당신에게 결코 거품 정렬 있어야하는데,하지만 것처럼 arrsort에 대한 여러분의 코드가 보이는
+0

괜찮 으면, 나는 배열을 전혀 바꿀 수 없다. –

+0

asker가 k와 j뿐만 아니라 prt [k]와 prt [j]를 비교하기를 원할 것으로 보인다. – DrC

+0

@DrC 아마, 일어날 것입니다. – IllusiveBrian

관련 문제