2015-01-17 2 views
1

나는 컴퓨터 과학을 전공하는 초보자 C 프로그래머이며 정수 배열을 정렬하는 정렬 프로그램을 만들려고 노력하고 있는데 잘못된 결과가 계속 나오고 있는데 이것이 지금까지 얻은 것입니다.정수 배열 정렬 C

#include <stdio.h> 
#include <string.h>  
#define TAM 9 

int sort_array(int num1[],int num2[]);  
int main(){ 
    int i=0; 
    int num1[TAM] = {5,6,2,4,7,1,3,0}; 
    int num2[TAM] = {0}; 
    int * ptr_num2 = num2; 

    sort_array(num1,num2); 

    while(*ptr_num2 != '\0'){ 
     printf("%c",*ptr_num2+48); 
     ptr_num2++; 
    } 
    putchar('\n'); 

    return 0; 
} 

int sort_array(int num1[],int num2[]){ 
    int min=256,max=0,i,j; 
    int * ptr_num1 = num1; 
    int * ptr_max = num1; 
    int * ptr_num2 = num2; 

    /* check for max */ 
    while(*ptr_max != '\0'){ 
     if(*ptr_max > max) max = *ptr_max; 
     ptr_max++; 
    } 

    for(i=0;i<TAM-1;i++){ 
     /* check for min */ 
     for(j=0;j<TAM-1;j++){ 
      if(*ptr_num1 < min) min = *ptr_num1; 
      ptr_num1++; 
      num1[i] = max; 
     } 
     *ptr_num2 = min; 
     ptr_num2++; 
    } 
    return 0; 
} 

나는 이미 몇 시간 동안 내 머리를 두드렸다.

편집 : 몇 가지를 실험하고 있기 때문에 이러한 것들 중 일부는 이해가되지 않을 수도 있음을 잊어 버렸습니다.

+0

특정 입력에 대해 실제 출력과 예상 출력은 무엇입니까? –

+2

또한 배열에 'num1'이 9 개의 요소를 포함하도록 선언되었으므로 프로그램에서 [* undefined behavior *] (http://en.wikipedia.org/wiki/Undefined_behavior)를 사용할 수 있지만 * 8 * 이는 마지막 요소의 값이 불확정하다는 것을 의미합니다. –

+0

왜 그런 복잡한 정렬 루틴을 선택하겠습니까? 이상한 요구 사항이 있습니까? –

답변

2

일반적인 배열 정렬에 대해 잘 모르겠다는 것을 이해합니다. 더 간단한 것 중 하나를 소개하겠습니다. 일반적으로 가장 효율적인 것은 아니지만, 이해하기 쉬운 것이 가장 쉽습니다. 데이터베이스가 아닌 작은 배열을 망쳐 놓고 있다는 사실을 고려하면 괜찮습니다.

나는 좋은 옛 친구에 대해 이야기하고 있습니다. 우리의 버블 정렬.

버블 정렬은 잘 알려진 간단한 배열 정렬 알고리즘입니다 - 논리가 간단합니다. 배열 [1], 배열 [1], 배열 [2] 등의 배열 [0], 배열 [2] 등의 배열로 전체 배열을 두 가지로 배열합니다.

그들은 당신의 경우에 더 큰 인덱스 번호가 더 낮은 인덱스 번호보다 크다고 가정합니다 - 당신이 전체 배열을 통과하고 전혀 스왑하지 않은 반복에 도달 할 때까지 그들 사이를 스왑합니다. 당신이 잘 이해하지 못했다 경우

, 여기에 (도대체 위키 피 디아를 사용하는 사람들 OMG 나는 그런 n00b을 해요) 위키 피 디아에서 의사 코드입니다 :

procedure bubbleSort(A : list of sortable items) 
n = length(A) 
repeat 
swapped = false 
for i = 1 to n-1 inclusive do 
    /* if this pair is out of order */ 
    if A[i-1] > A[i] then 
    /* swap them and remember something changed */ 
    swap(A[i-1], A[i]) 
    swapped = true 
    end if 
    end for 
until not swapped 
end procedure 

는 그리고 여기에 몇 가지 C 코드입니다 :

#include <stdio.h> 

int main() 
{ 
int array[100], n, c, d, swap; 
printf("Enter number of elements\n"); 
scanf("%d", &n); 
printf("Enter %d integers\n", n); 
for (c = 0; c < n; c++) 
scanf("%d", &array[c]); 
for (c = 0 ; c < (n - 1); c++) 
{ 
for (d = 0 ; d < n - c - 1; d++) 
{ 
    if (array[d] > array[d+1]) /* For decreasing order use < */ 
    { 
    swap  = array[d]; 
    array[d] = array[d+1]; 
    array[d+1] = swap; 
    } 
    } 
} 

printf("Sorted list in ascending order:\n"); 

for (c = 0 ; c < n ; c++) 
printf("%d\n", array[c]); 

return 0; 
} 
http://www.programmingsimplified.com/c/source-code/c-program-bubble-sort

희망이 당신을 도와, 그리고 행운을 빕니다 :)

: 다시 여기

, BTW, 신용 나를 위해 아니다

+0

@AAbranov, 저는 거의 40 년 동안 프로그래밍을 해왔으며 Wiki 및 기타 온라인 리소스를 실시간으로 절약 할 수 있다고 생각합니다. 그리고 제 매뉴얼에 많은 참조 설명서를 보관할 필요가 없습니다. 책상. – user3629249