재귀 선택 정렬 기능에 대한 혼란

perpetually_confused

가장 큰 숫자를 골라 뒤에 놓는 재귀 선택 정렬 함수를 작성하려고합니다. 나는 printf를 사용하여 무엇이 잘못되었는지 확인했고, "1 8 15 3 17 12 4 8 4"를 입력하면 for 루프 직전 8 번째 반복에서 멈 춥니 다. 세분화 오류가 발생합니다.


#include <stdio.h>
#include <stdlib.h>


void swap(int* ptr1, int* ptr2);
int selection_sort2(int A[], int n, int itr);

int 
main(int argc, char* argv[]){
    int temp_array[1000], counter=0, i, itr=0;
    
    printf("Enter as many as 1000 values, ^D to end\n");
    while(scanf("%d", &temp_array[counter]) == 1){
        counter++;
        }
        
    printf("%d values read into array\n", counter);
    printf("Before: ");
    for(i=0; i<counter;i++){
        printf("%4d", temp_array[i]);
    }
    printf("\n");
    
    selection_sort2(temp_array, counter, itr);

    return 0;
    }
void swap(int* ptr1, int* ptr2){
    int temp;   
    temp = *ptr1;
    *ptr1 = *ptr2;
    *ptr2 = temp;
}

int selection_sort2(int A[], int n, int itr){
    int j,temp, max, i;
    int itrs = itr;
    printf("%d\n", n);
    if(n==1){    
        printf("After2: ");
        for(i=0; i<n+itrs;i++){
            printf("%4d", A[i]);
        }
        return 1;
    }

    temp = A[n-1];
    for(j=n-1;j>=0;j--){
        printf("ok");
        printf("what %d ", j);
        if(A[j]>temp){
            max = j;
            temp = A[j];
        }
    }

    if(max!= n-1){ 
        swap(&A[n-1], &A[max]);
        }

    itrs++;
    return selection_sort2(A,n-1,itrs);
}
csavvy

원인은 초기화되지 않은 변수 max이며 정렬 / 스왑을 중지 할시기를 결정하지 않는 것입니다.

배열이 이미 정렬되고 반복기가 1보다 크면 (이 경우 시간 n값이 2가되고 배열이 이미 정렬되어 있음) if(A[j]>temp){만족스럽지 않으므로 max정크 값을 갖게되고 해당 정크 값이 문 아래에 표시됩니다. 호출되고 충돌이 발생합니다.

if(max!= n-1){ 
    swap(&A[n-1], &A[max]);
}

충돌을 처리하는 솔루션

int swapped = 0프로그램 시작 부분에 변수 취하고 swapped = 1조건이 if(A[j]>temp){충족 될 때 만듭니다 .

swap상태를 다음과 같이 변경해야 합니다.if(swapped && max != n-1){

결론을 내리려면 다음 변경 사항을 수행해야합니다.

int j,temp, max, i, swapped = 0;
static int count = 0;

if(A[j]>temp)
{
    max = j;
    temp = A[j];
    swapped = 1
}
// this will let you know the cause of the crash
printf("\n after %d iteration max = %d and temp =%d\n",++count,max,temp );

if(swapped && max != n-1)
{
    swap(&A[n-1], &A[max]);
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

병합 정렬 기능에 대한 재귀가 혼란 스러움

분류에서Dev

재진입 기능에 대한 혼란

분류에서Dev

'정렬'속성에 대한 혼란

분류에서Dev

재귀 조건 부정에 대해 혼란 스러움, 예제 코드 포함

분류에서Dev

반환에 대한 BST 조회 재귀 함수 혼란

분류에서Dev

재귀를 사용할 때 return 문에 대한 혼란

분류에서Dev

Consul과 dnsmaqs 사용 및 재귀에 대한 혼란

분류에서Dev

PDF의 현재 변환 행렬에 대한 혼란

분류에서Dev

특정 파일에 대한 재귀가있는 powershell 선택 문자열

분류에서Dev

선택 정렬 실행 시간 혼란

분류에서Dev

버블 정렬 복잡성에 대한 혼란

분류에서Dev

정규식 패턴에 대한 혼란

분류에서Dev

위치에 대한 혼란 : 고정

분류에서Dev

선택 정렬에서 꼬리 재귀 제거

분류에서Dev

GCD 및 직렬 대기열에 대한 많은 혼란

분류에서Dev

Haskell 재귀 정렬 기능

분류에서Dev

선택 및 끌기 가능한 행이있는 Primefaces dataTable, 행이 재정렬 될 때 선택이 실패 함

분류에서Dev

확인란에 대한 jquery 선택기의 성능 차이

분류에서Dev

id에 대한 포인터 선언에 대한 혼란

분류에서Dev

병렬 함수에 대한 비동기 혼란

분류에서Dev

병렬 함수에 대한 비동기 혼란

분류에서Dev

여권 직렬화 / 역 직렬화 사용자의 콜백 기능에 대한 혼란

분류에서Dev

Docker ENTRYPOINT에 대한 혼란

분류에서Dev

rxjs debounceTime에 대한 혼란

분류에서Dev

ARC, AutoRelease에 대한 혼란

분류에서Dev

InputStream에 대한 혼란

분류에서Dev

char []에 대한 혼란

분류에서Dev

ThreadGroup # activeCount ()에 대한 혼란

분류에서Dev

for ... in 루프에 대한 혼란

Related 관련 기사

뜨겁다태그

보관