간단한질문-정렬을 쓰지 않고 n번째 작은수 구하기(!?!?)(Quick sort)
화가마
질문 제목 : 정렬을 쓰지 않습니다.
질문 내용 :
질문 드리겠습니다...
1)일단 첫번째 left에 빨강색으로 해놓은곳을...
right로.. 즉 피벗을 맨 오른쪽으로 바꾼다면 그 뒤에 나오는 쏘스를
어떻게 바꿔야지 정상작동이 되나요 ...?
2)int main.뒤의 괄호 안에 있는건 도대체 무엇인가요..? 안써도 무방하다고 생각되는데...( 빨강색 표시 !! )
3) n째 작은수를 입력하세요 = 라고 printf 써놓고.. scanf로 받은다음... printf(%d,numbers[n번째])
이렇게 놓으면 출력되는건데... 참... 저의 비쥬얼스튜디오는 scanf가 안먹네요.. scanf_s로 쓰라고 하면서
그렇게 써도 안되고.. ㅠㅠ 혹시 시간이 되신다면 이 기능까지 추가해주시면 고맙겠습니다... ㅠㅠ 아니면
scanf_s이 문제를 해결하는 방법좀요 .. ㅠㅠ 저꺼 컴퓨터로 입력받는걸 못만들어서 ... 답답해서 추가로
번호매겨서 질문으로 올립니다 !! 즐거운 하루되세요 ^^
혹 이해가 안가신다면... QuickSort 검색해보시면 됩니다 !!
void quickSort(int numbers[], int array_size);
void q_sort(int numbers[], int left, int right);
void quickSort(int numbers[], int array_size)
{
q_sort(numbers, 0, array_size -1);
}
void q_sort(int numbers[], int left, int right)
{
int pivot, l_hold, r_hold;
l_hold = left;
r_hold = right;
pivot = numbers[left]; // 0번째 원소를 피봇으로 선택
while (left right)
{
// 값이 선택한 피봇과 같거나 크다면, 이동할 필요가 없다
while ((numbers[right] = pivot) && (left right))
right --;
// 그렇지 않고 값이 피봇보다 작다면,
// 피봇의 위치에 현재 값을 넣는다.
if (left != right)
{
numbers[left] = numbers[right];
}
// 왼쪽부터 현재 위치까지 값을 읽어들이면서
// 피봇보다 큰 값이 있다면, 값을 이동한다.
while ((numbers[left] = pivot) && (left right))
left ++;
if (left != right)
{
numbers[right] = numbers[left];
right --;
}
}
// 모든 스캔이 끝났다면, 피봇값을 현재 위치에 입력한다.
// 이제 피봇을 기준으로 왼쪽에는 피봇보다 작거나 같은 값만 남았다.
numbers[left] = pivot;
pivot = left;
left = l_hold;
right = r_hold;
// 재귀호출을 수행한다.
if (left pivot)
q_sort(numbers, left, pivot - 1);
if (right pivot)
q_sort(numbers, pivot+1, right);
}
int main(int argc, char **argv)
{
int data[] = {3,7,8,5,2,1,9,5,4};
int i;
quickSort(data, 9);
for (i =0; i 9; i++)
{
printf(%d\n, data[i]);
}
}
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2693956 | PlaySound재생이 안됩니다!(C에 음악넣기) | 지존 | 2025-05-06 |
2693928 | &와 *의 사용에 관한 명확한 이해 | 제나 | 2025-05-06 |
2693903 | 반복문 설명좀요 ㅠㅠ (2) | 란새 | 2025-05-06 |
2693869 | stdio.h 는 왜 쓰는건가요? (1) | 큰꽃들 | 2025-05-06 |
2693842 | 포인터 변수의 주소값끼리 더하는 것에 대해서 질문드립니다. (1) | 진솔 | 2025-05-05 |
2693811 | 소수 출력;;;; | 화이트캣 | 2025-05-05 |
2693788 | 이런 함수는 없나요? (3) | 앤드류 | 2025-05-05 |
2693758 | txt파일 불러와서 행렬로 저장 | 큰애 | 2025-05-05 |
2693727 | scanf 오류 문제!! (2) | 큰나래 | 2025-05-04 |
2693704 | 구조체 주소록 문제인데 도와주세요 (2) | 도1도캣 | 2025-05-04 |
2693676 | 열혈강의 c언어 질문입니다 | 하양이 | 2025-05-04 |
2693647 | 12.620000 을요 12.620 으로 어떻게 표현해요? (2) | 파도 | 2025-05-04 |
2693619 | 타이틀 코드.. | 단순드립 | 2025-05-03 |
2693591 | 컴파일 에러에서 질문드립니다 (3) | 게자리 | 2025-05-03 |
2693463 | 동적할당 이용시 fwrite사용을 어떻게 해야하나요..? (10) | 일본어못해요 | 2025-05-02 |
2693387 | 배열문제입니다 수정오류캡쳐했습니다 (6) | 연하얀 | 2025-05-01 |
2693356 | text 입출력 내림차순 질문입니다 ㅠ | 빛글 | 2025-05-01 |
2693328 | C언어를이용해서 .txt파일 외에 다른 확장자 파일 삭제가 가능한지.. (2) | 대나무 | 2025-05-01 |
2693299 | 파일입출력 바이너리파일 | 독특한 | 2025-04-30 |
2693273 | 오류 (1) | 귀1여운렩 | 2025-04-30 |