0
그래서 내 프로그램은 파티션 정렬을 사용하여 10 개의 사용자 입력 이름을 알파벳 순서로 다시 인쇄합니다. IVE는 전에 파티션 정렬을 사용하지 않았습니다. 그래서 이것을 알아내는 데 있어서는 전혀 경험이 없습니다.파티션 및 스왑을 사용하여 알파벳 순서로 정렬
숫자에 파티션 정렬 예제를 사용하고 strcmp를 사용하여 정렬하기 위해 조작하려고합니다.
내가 가지고있는 파티션 기능을 제외하고는 대부분 내 모든 코드가 문제가 있습니다. 누군가이 나를 어떻게 이해할 수 있도록 도와 주실 수 있습니다. 그리고 알파벳순으로 10 개의 이름을 정렬 할 수있는 방법을 알려주십시오.
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define DEBUG_LEVEL 0
int partition(int a[], int left, int right);
void swap(int *a, int *b);
#define SIZE 10
int main(int argc, const char * argv[]) {
char Names[10][10];
int count = 10;
int i;
int a[SIZE];
printf("Enter 10 names:");
for (i=0; i < count; ++i)
{
gets(Names[i]);
}
printf("\n\n");
partition(a, 0, SIZE -1);
printf("The names in alphabetical order are\n");
for (i=0; i< count; ++i)
{
printf("%s\n",Names[i]);
}
getchar();
}
int partition(int a[], int left, int right) {
int i, j, key;
key = a[left];
i = left + 1;
j = right;
while (strcmp(i, j) <0) {
while (i <= right && a[i] <= key)
++i;
while (j >= left && a[j] > key)
--j;
if (i < j)
swap(&a[i], &a[j]);
}
swap(&a[left], &a[j]);
return j;
}
void swap(int *a, int *b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
1) 코드가'partition (a, 0, SIZE -1);을 호출하면 'a'의 내용이 초기화되지 않습니다. 2)'i', j'는'int'입니다. – chux
나중에 내가 말한 것처럼이 파티션 세그먼트를 복사 한 다음 단어를 정렬하기 위해 조작 할 수 있기를 바라는 코드에 코드를 추가했습니다. 파티션 정렬 대신 Quicksort를 사용하는 것이 더 쉬운가요? 힌트를 주셔서 감사하지만 메신저는 여전히 어떤 방법으로도 정렬 할 수있는 것처럼 보이지 않습니다. @chux – Zanderg
이것은 정렬 도입에 대한 질문이 아닙니다.)'는 2 문자열의 주소를 취하는 함수입니다 .2 int를 전달하는 것은 의미가 없습니다. 물론 컴파일러가 경고를 제공해야합니다 (경고해야 함). 쉽게 경고를 표시하는 게시 코드는 1) 코드를 컴파일하지 않았 음을 의미합니다. (즉, 주요 no-no입니다) 2) 경고를 사용하지 못하게했습니다 (모두 활성화). 3) 고대 컴파일러와 작업 (새 것을 얻습니다.) 또는 4) 경고를 무시합니다. (그들을 읽고 그것에 따라 행동하십시오). – chux