실수를 이용한 퀵 정렬(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 답변
-
scanf()
로 입력값을 받을 때,double
타입 컨테이너에 넣을 거라면 반드시"%lf"
로 받으셔야 합니다.scanf("%lf", &arr[i]);
- printf에 대해서는 https://hashcode.co.kr/questions/584/printf%EC%97%90%EC%84%9C-double%EC%9D%98-%ED%98%95%EC%8B%9D-%EC%A7%80%EC%A0%95%EC%9E%90 이 답변을 참고하시면 되겠네요. doodoji 2018.9.21 14:14
댓글 입력