실수를 이용한 퀵 정렬(C언어)

조회수 1919회
#include <stdio.h>
#include <stdlib.h> //랜덤함수 호출

void Swap(double arr[], int a, int b) // a,b 스왑 함수 
{
    double temp = arr[a];
    arr[a] = arr[b];
    arr[b] = temp;
}
int Partition(double arr[], int left, int right)
{
    float pivot = arr[left]; // 피벗의 위치는 가장 왼쪽에서 시작
    int low = left + 1;
    int high = right;

    while (low <= high) // 교차되기 전까지 반복한다 
    {
        while (pivot >= arr[low] && low <= right) // 피벗보다 큰 값을 찾는 과정 
        {
            low++; // low를 오른쪽으로 이동 
        }
        while (pivot <= arr[high] && high >= (left + 1)) // 피벗보다 작은 값을 찾는 과정 
        {
            high--; // high를 왼쪽으로 이동
        }
        if (low <= high)// 교차되지 않은 상태이면 스왑 과정 실행 
        {
            Swap(arr, low, high); //low와 high를 스왑 
        }
    }
    Swap(arr, left, high); // 피벗과 high가 가리키는 대상을 교환 
    return high;  // 옮겨진 피벗의 위치정보를 반환 

}


void QuickSort(double arr[], int left, int right)
{
    if (left <= right)
    {
        int pivot = Partition(arr, left, right);   // 둘로 나누어서
        QuickSort(arr, left, pivot - 1);   // 왼쪽 영역을 정렬한다.
        QuickSort(arr, pivot + 1, right);   // 오른쪽 영역을 정렬한다.
    }
}

int main()
{
    double arr[100];
    int n, i;

    printf("데이터의 수를 입력해주세요: ");
    scanf("%d", &n);
    printf("\n");
    printf("\n");


    printf("데이터를 입력해주세요.");
    printf("\n");
    for (i = 0; i < n; i++) {
        printf("%d번째 데이터:", i + 1);
        scanf("%f", &arr[i]);
    }

    QuickSort(arr, 0, n - 1);

    printf("정렬후 배열 :");
    for (i = 0; i < n; i++)
        printf("%d ", arr[i]);
    printf("\n");



    return 0;
}

제가 이렇게 코드를 짰는데 어디가 문제인지 모르겠네요.... 실행을 하면 정렬이 안되요 ㅠㅠ

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)