일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- go
- 스택 자료구조
- 루비 초보
- 장고 웹 만들기
- grid html
- golang
- flex html
- 풀스택?
- 후위수식
- 장고 하는법
- 괄호 유효성
- 스택 중위수식
- rest graphql
- 자료구조 데크
- 스택 구현
- 스택 삭제
- 괄호 짝 잘맞는지
- 중위수식을 후위수식
- 데크 구현
- 스택 삽입
- Django tutorial
- 중위수식
- 스택 유효성
- 풀스택
- grid flex
- 스택 괄호
- restapi graphql
- rest gql
- 스택 후위수식
- https://stackoverflow.com/questions/219110/how-python-web-frameworks-wsgi-and-cgi-fit-together/219124#219124
- Today
- Total
donchanee
합병정렬에 대한 문제. 본문
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
struct node *next;
};
void partition(struct node *L, struct node **L1, struct node **L2, int n) {
struct node *p = L;
*L1 = L;
for (int i = 0; i < (n / 2) - 1; i++) {
p = p->next;
}
*L2 = p->next;
p->next = NULL;
}
struct node *merge(struct node **L1, struct node **L2){
struct node *p, *L;
struct node *A = *L1;
struct node *B = *L2;
if (A->data <= B->data){
L = A;
A = A->next;
p = L;
}
else{
L = B;
B = B->next;
p = L;
}
while ((A != NULL) && (B != NULL)){
if (A->data <= B->data){
p->next = A;
A = A->next;
p = p->next;
}
else{
p->next = B;
B = B->next;
p = p->next;
}
}
while (A != NULL){
p->next = A;
p = A;
A = A->next;
}
while (B != NULL){
p->next = B;
p = B;
B = B->next;
}
return L;
}
void mergeSort(struct node **L, int n){
struct node *L1, *L2, *p = *L;
if (n > 1){
partition(p, &L1, &L2, n);
if ((n % 2) == 0){
mergeSort(&L1, n / 2);
mergeSort(&L2, n / 2);
}
else{
mergeSort(&L1, n / 2);
mergeSort(&L2, (n / 2) + 1);
}
*L = merge(&L1, &L2);
}
}
void addList(struct node **L, int value) {
struct node *p = *L;
struct node *newnode = (struct node*)malloc(sizeof(struct node));
newnode->data = value;
newnode->next = NULL;
if (*L == NULL) {
*L = newnode;
}
else {
while (p->next != NULL) {
p = p->next;
}
p->next = newnode;
}
}
void printList(struct node *L) {
struct node *p = L;
while (p != NULL) {
printf(" %d", p->data);
p = p->next;
}
printf("\n");
}
void deleteList(struct node *L) {
struct node *p = L;
while (p != NULL) {
L = L->next;
free(p);
p = L;
}
}
void main(){
int n, value;
struct node *L = NULL;
scanf("%d", &n);
for (int i = 0; i < n; i++){
scanf("%d", &value);
addList(&L, value);
}
mergeSort(&L, n);
printList(L);
deleteList(L);
}
'프로그래밍 > C언어' 카테고리의 다른 글
동적할당에 대한 4문제 (0) | 2018.12.07 |
---|---|
구조체에 대한 5문제 (0) | 2018.12.07 |
문자열에 대한 3문제 (0) | 2018.12.07 |
포인터에 대한 4문제 (0) | 2018.10.02 |
배열 문제 #7. (0) | 2018.05.22 |