C언어 사전순 정렬 - ceon-eo sajeonsun jeonglyeol

10개의 문자열을 입력받고 알파벳(사전) 순으로 정렬하는 문자열을 변형하는 알고리즘입니다.

문자열을 입력하면 알파벳순으로 정렬하여 출력하는 알고리즘

#include <stdio.h> #include <stdlib.h> #include <string.h> int convert_string(const void *a, const void *b) { return strcmp((char *)a, (char *)b); } int main() { char s[10][8]; for(int i=0;i<10;i++){ scanf("%s",s[i]); } qsort(s, sizeof(s) / sizeof(s[0]), sizeof(s[0]), convert_string); for (int i = 0; i < 10; i++) { printf("%s ", s[i]); } printf("\n"); return 0; }

C언어를 배울때 가장 기본으로, 자주 쓰이는 코드인데 오랜만에 보면 조금 헷갈릴 때가 있어서 정리해두기로.

아래 방법이 가장 단순한 방법

// A_len : 배열 길이, A : 배열 이름 int i, j, temp; for(i=0; i<A_len; i++) { for(j=i+1; j<A_len+1; j++) { if(A[i] > A[j]) { temp = A[i]; A[i] = A[j]; A[j] = temp; } } }

첫 번째 항목(기준)과 두 번째~A_len번째 항목을 순서대로 비교하여 첫 번째 항목보다 다른 항목이 크면 값을 바꿔주는 방법.

이 방법은 단순하지만 값을 여러번 바꾸는 단점이 있다.

그걸 해결해 줄 방법이 아래 방법

// A_len : 배열 길이, A : 배열 이름 int i, j, min, temp; for(i=0; i<A_len; i++) { min = i; for(j=i+1; j<A_len+1; j++) { if(A[min] > A[j]) { min = j; } } if(min != i) { temp = A[i]; A[i] = A[min]; A[min] = temp; } }

이렇게 코딩하면, 순서를 매번 바꾸는 것이 아니라 각 요소의 값에 들어갈 위치를 기억해 뒀다가 한 번만 바꾸면 되므로 조금 더 효율적.

그런데 왜 코딩 라인이 안 맞을까.

C언어 코딩 연습을 하면서 깨닫는데 확실히 C언어보다는 JAVA로 많은 사람들이 공부하고 있다는 느낌이 든다.

검색해도 주로 JAVA 코드가 나오는 편.

JAVA 공부의 필요성을 더 느낀다.

C언어를 이용하여 배열에 있는 데이터 값을 오름차순으로 정렬하는 프로그램을 만들어 보겠습니다.

int data[8] = { 85,90,95,70,82,60,92,88 }; int data_size = sizeof(data) / sizeof(int);

먼저 정렬할 데이터는 int형 배열로 8개의 값을 초기화했습니다. 그리고 배열의 크기를 동적으로 받았습니다.

for (i = 0; i < data_size; i++) { for (j = 0; j < (data_size - 1) - i; j++) { if (data[j] > data[j + 1]) { // 버블 정렬 사용 temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp; } } }

저는 위 코드에서 보이는 것처럼 for문을 사용을 하여 프로그램을 만들었고, 여러 가지 정렬 알고리즘 중에서 가장 간단한 버블 정렬을 사용했습니다.

#include <stdio.h> int main(void) { int data[8] = { 85,90,95,70,82,60,92,88 }; // 정렬할 배열 int i, j, temp = 0; // 변수 초기화 printf("Before : "); int data_size = sizeof(data) / sizeof(int); // sizeof(score) / sizeof(int)는 score배열의 크기를 구하는 방법으로 이것을 이용해 배열의 크기를 가져옴 for (i = 0; i < data_size; i++) { printf("%4d", data[i]); // 정렬 전 배열값 출력 } for (i = 0; i < data_size; i++) { for (j = 0; j < (data_size - 1) - i; j++) { if (data[j] > data[j + 1]) { // 버블 정렬 사용 temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp; } } } printf("\nAfter : "); for (i = 0; i < data_size; i++) { printf("%4d", data[i]); // 정렬 후 배열값 출력 } printf("\n"); return 0; }

위 코드는 전체 코드입니다. 이렇게 간단한 버블 정렬을 사용해 오름차순으로 정렬하는 프로그램을 만들었습니다.

오름차순이 적용된 정수 예제1
오름차순이 적용된 정수 예제2

제: 정수를 5개를 배열에 입력받고 오름차순으로 정렬하는 프로그램을 만들어라

답안: 

/*숫자 5개를 배열에 입력받아서 오름차순으로 정렬하는 알고리즘*/ #include <stdio.h> int main(void) { int i; int j; int temp; //값을 임시적으로 저장할 변수 int num[5] = { 0 }; printf("값을 5개 입력해주세요:"); for (i = 0; i < 5; i++) { scanf_s("%d", &num[i]); } for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { if (num[i] < num[j]) { //이부분이 상당히 중요한 부분입니다 temp = num[i]; num[i] = num[j]; num[j] = temp; } } } printf("정렬 결과는: "); for (i = 0; i < 5; i++) { printf("%d ", num[i]); } return 0; }

문제: 정수를 5개를 배열에 입력받고 내림차순으로 정렬하는 프로그램을 만들어라

답안: 

내림차순이 적용된 정수 예제1
내림차순이 적용된 정수 예제2/*숫자 5개를 배열에 입력받아서 내림차순으로 정렬하는 알고리즘*/ #include <stdio.h> int main(void) { int i; int j; int temp; //값을 임시적으로 저장할 변수 int num[5] = { 0 }; printf("값을 5개 입력해주세요:"); for (i = 0; i < 5; i++) { scanf_s("%d", &num[i]); } for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { if (num[i] > num[j]) { temp = num[i]; num[i] = num[j]; num[j] = temp; } } } printf("정렬 결과는: "); for (i = 0; i < 5; i++) { printf("%d ", num[i]); } return 0; }

다들 어디가 가장 중요한지 느끼셨나요??

바로 "IF절" 안이 가장 중요한데요

나머지 내용은 다 똑같아도 <이면 오름차순이 되고 >이면 내림차순이 된답니다

C언어에 더 알고 싶다면?

👉C언어 마이크로 소프트 Visual Studio 2019 설치방법은?

👉C언어 알고리즘/순서도/프로그래밍 개념/디버깅이란?

👉C언어로 구사하는 알고리즘 1. 날짜값을 넣으면 해당 요일이 나오는 코딩 예제(윤년계산)

👉C언어로 구사하는 알고리즘 2. 형변환 그레이코드를 만드는 알고리즘

👉C언어로 구사하는 알고리즘 3. 성적 석차 구하기 알고리즘 구현하기

👉C언어로 구사하는 알고리즘 4. 정수 오름차순/내림차순을 구현하는 알고리즘(SORT)

Toplist

최신 우편물

태그