을 연결 나는 연결리스트를 구축하고이 두 구조체가 있습니다 버블이 종류의 목록
struct Element {
int value;
struct Element *next;
};
struct List {
struct Element *first;
};
가 지금은 버블 정렬과 링크 된 목록을 정렬하고 싶습니다. 현재 요소의 값과 다음 요소의 값을 비교하는 sortList 메소드를 구현했습니다. 다음 요소의 값이 현재 요소보다 크면 교체해야합니다. 그러나이 순간에는 제대로 작동하지 않습니다.
void sortList(List *list) {
Element *current = malloc(sizeof(Element));
current = list->first;
Element *nextElement = malloc(sizeof(Element));
nextElement = current->next;
Element *tmp = malloc(sizeof(Element));
tmp = NULL;
int changed = 1;
while (changed) {
changed = 0;
for (current; (current != NULL) && (nextElement != NULL);) {
if (current->value > nextElement->value) {
tmp = current->next;
current->next = nextElement->next;
nextElement->next = tmp;
changed = 1;
}
current = current->next;
nextElement = nextElement->next;
}
}
}
정확히 작동하지 않는 항목은 무엇입니까? 기본 접근법은 유효합니다; 그러나 스왑 작업을 별도의 함수로 옮기는 것이 좋습니다. – Codor
목록이 올바르게 정렬되지 않았습니다. 입력 : 1 4 3 2 6 출력 : 1 4 2 6 3 – torhoehn
두 개의 요소가 잘못된 순서로 목록을 정렬 할 수 있습니까? – Codor