728x90
반응형
배열 기본 예제
#include <iostream>
int main()
{
int SortData[] = {
20, 25, 82, 48, 49, 29, 98, 77, 45, 32
};
for (int i = 0; i < 10; i++)
{
printf("%d ", SortData[i]);
}
printf("\n");
}
[오름차순]
#include <iostream>
#include <windows.h>
// 정렬의 조건을 만들어 주는 함수
// 오름차순
int QuickSort1(const void *arg1, const void *arg2 ) {
int *p1 = (int*)arg1; // arg1를 int타입의 주소로 봐라 (주소전달, 값전달)
int *p2 = (int*)arg2; // arg2를 int타입의 주소로 봐라
// (앞의 인수 - 뒤의 인수)라는 표현을 사용하게되면 슌차정렬을 하라는 것.
return (*p1 - *p2);
}
int main()
{
int SortData[] = {
20, 25, 82, 48, 49, 29, 98, 77, 45, 32
};
for (int i = 0; i < 10; i++)
{
printf("%d ", SortData[i]);
}
printf("\n");
// 정렬의 옵션을 정의한 함수 이름
// 정렬 해주는 함수
// 10: 정렬한 개수, int: 정렬할 타입, 정랼할 함수: QuickSort1
qsort(SortData, 10, sizeof(int), QuickSort1 ); // quick Sort
for (int i = 0; i < 10; i++)
{
printf("%d ", SortData[i]);
}
printf("\n");
}
[내림차순]
#include <iostream>
#include <windows.h>
// 정렬의 조건을 만들어 주는 함수
// 오름차순
int QuickSort2(const void *arg1, const void *arg2) {
int *p1 = (int*)arg1; // arg1를 int타입의 주소로 봐라 (주소전달, 값전달)
int *p2 = (int*)arg2; // arg2를 int타입의 주소로 봐라
// (앞의 인수 - 뒤의 인수)라는 표현을 사용하게되면 슌차정렬을 하라는 것.
return (*p2 - *p1);
}
int main()
{
int SortData[] = {
20, 25, 82, 48, 49, 29, 98, 77, 45, 32
};
for (int i = 0; i < 10; i++)
{
printf("%d ", SortData[i]);
}
printf("\n");
// 정렬의 옵션을 정의한 함수 이름
// 정렬 해주는 함수
// 10: 정렬한 개수, int: 정렬할 타입, 정랼할 함수: QuickSort2
qsort(SortData, 10, sizeof(int), QuickSort2); // quick Sort2
for (int i = 0; i < 10; i++)
{
printf("%d ", SortData[i]);
}
printf("\n");
}
[순차정렬]
#include <iostream>
#include <windows.h>
// 정렬의 조건을 만들어 주는 함수
// ( > ) 순차정렬
int QuickSort3(const void *arg1, const void *arg2) {
int *p1 = (int*)arg1; // arg1를 int타입의 주소로 봐라 (주소전달, 값전달)
int *p2 = (int*)arg2; // arg2를 int타입의 주소로 봐라
if (*p1 > *p2) {
return +1;
}
else {
return -1;
}
// 삼항연산자로 바꾼다면
// return(*p1 > *p2) ? +1 : -1;
}
int main()
{
int SortData[] = {
20, 25, 82, 48, 49, 29, 98, 77, 45, 32
};
for (int i = 0; i < 10; i++)
{
printf("%d ", SortData[i]);
}
printf("\n");
// 정렬의 옵션을 정의한 함수 이름
// 정렬 해주는 함수
// 10: 정렬한 개수, int: 정렬할 타입, 정랼할 함수: QuickSort3
qsort(SortData, 10, sizeof(int), QuickSort3); // quick Sort3
for (int i = 0; i < 10; i++)
{
printf("%d ", SortData[i]);
}
printf("\n");
}
[역순정렬]
#include <iostream>
#include <windows.h>
// 정렬의 조건을 만들어 주는 함수
// ( < ) 역순정렬
int QuickSort3(const void *arg1, const void *arg2) {
int *p1 = (int*)arg1; // arg1를 int타입의 주소로 봐라 (주소전달, 값전달)
int *p2 = (int*)arg2; // arg2를 int타입의 주소로 봐라
if (*p1 < *p2) {
return +1;
}
else {
return -1;
}
// 삼항연산자로 바꾼다면
// return(*p1 < *p2) ? +1 : -1;
}
int main()
{
int SortData[] = {
20, 25, 82, 48, 49, 29, 98, 77, 45, 32
};
for (int i = 0; i < 10; i++)
{
printf("%d ", SortData[i]);
}
printf("\n");
// 정렬의 옵션을 정의한 함수 이름
// 정렬 해주는 함수
// 10: 정렬한 개수, int: 정렬할 타입, 정랼할 함수: QuickSort3
qsort(SortData, 10, sizeof(int), QuickSort3); // quick Sort3
for (int i = 0; i < 10; i++)
{
printf("%d ", SortData[i]);
}
printf("\n");
}
[전체 코드]
#include <iostream>
#include <windows.h>
// 정렬의 조건을 만들어 주는 함수
// 오름차순
int QuickSort1(const void *arg1, const void *arg2 ) {
int *p1 = (int*)arg1; // arg1를 int타입의 주소로 봐라 (주소전달, 값전달)
int *p2 = (int*)arg2; // arg2를 int타입의 주소로 봐라
// (앞의 인수 - 뒤의 인수)라는 표현을 사용하게되면 슌차정렬을 하라는 것.
return (*p1 - *p2);
}
// 내림차순
int QuickSort2(const void *arg1, const void *arg2) {
int *p1 = (int*)arg1; // arg1를 int타입의 주소로 봐라 (주소전달, 값전달)
int *p2 = (int*)arg2; // arg2를 int타입의 주소로 봐라
// (앞의 인수 - 뒤의 인수)라는 표현을 사용하게되면 슌차정렬을 하라는 것.
return (*p2 - *p1);
}
// ( > ) 순차정렬
// ( < ) 역순정렬
int QuickSort3(const void *arg1, const void *arg2) {
int *p1 = (int*)arg1; // arg1를 int타입의 주소로 봐라 (주소전달, 값전달)
int *p2 = (int*)arg2; // arg2를 int타입의 주소로 봐라
if (*p1 > *p2) {
return +1;
}
else {
return -1;
}
// 삼항연산자로 바꾼다면
// return(*p1 > *p2) ? +1 : -1;
}
int main()
{
int SortData[] = {
20, 25, 82, 48, 49, 29, 98, 77, 45, 32
};
for (int i = 0; i < 10; i++)
{
printf("%d ", SortData[i]);
}
printf("\n");
// 정렬의 옵션을 정의한 함수 이름
// 정렬 해주는 함수
// 10: 정렬한 개수, int: 정렬할 타입, 정랼할 함수: QuickSort1
qsort(SortData, 10, sizeof(int), QuickSort1 ); // quick Sort1
for (int i = 0; i < 10; i++)
{
printf("%d ", SortData[i]);
}
printf("\n");
qsort(SortData, 10, sizeof(int), QuickSort2); // quick Sort2
for (int i = 0; i < 10; i++)
{
printf("%d ", SortData[i]);
}
printf("\n");
qsort(SortData, 10, sizeof(int), QuickSort3); // quick Sort3
for (int i = 0; i < 10; i++)
{
printf("%d ", SortData[i]);
}
printf("\n");
}
[구조체 추가]
index를 기준으로 정렬을 할 것이다.
index를 정렬 시키면 뒤에 있는 데이터들이 다 따라온다.
#include <iostream>
#include <windows.h>
// 정렬의 조건을 만들어 주는 함수
// 오름차순
int QuickSort1(const void *arg1, const void *arg2 ) {
int *p1 = (int*)arg1; // arg1를 int타입의 주소로 봐라 (주소전달, 값전달)
int *p2 = (int*)arg2; // arg2를 int타입의 주소로 봐라
// (앞의 인수 - 뒤의 인수)라는 표현을 사용하게되면 슌차정렬을 하라는 것.
return (*p1 - *p2);
}
// 내림차순
int QuickSort2(const void *arg1, const void *arg2) {
int *p1 = (int*)arg1; // arg1를 int타입의 주소로 봐라 (주소전달, 값전달)
int *p2 = (int*)arg2; // arg2를 int타입의 주소로 봐라
// (앞의 인수 - 뒤의 인수)라는 표현을 사용하게되면 슌차정렬을 하라는 것.
return (*p2 - *p1);
}
// ( > ) 순차정렬
// ( < ) 역순정렬
int QuickSort3(const void *arg1, const void *arg2) {
int *p1 = (int*)arg1; // arg1를 int타입의 주소로 봐라 (주소전달, 값전달)
int *p2 = (int*)arg2; // arg2를 int타입의 주소로 봐라
if (*p1 > *p2) {
return +1;
}
else {
return -1;
}
// 삼항연산자로 바꾼다면
// return(*p1 > *p2) ? +1 : -1;
}
struct STRU {
int index;
int data[3];
};
#include "time.h"
int main()
{
srand((unsigned)time(NULL));
STRU DataInfo[6];
for (int i = 0; i < 6; i++)
{
DataInfo[i].index = rand() % 10;
for (int j = 0; j < 3; j++)
{
DataInfo[i].data[j] = rand() % 50 + 50;
}
}
// 출력
for (int i = 0; i < 6; i++)
{
printf("%d : ", DataInfo[i].index);
for (int j = 0; j < 3; j++)
{
printf("%d : ", DataInfo[i].data[j]);
}
printf("\n");
}
printf("\n");
}
[정렬 후]
#include <iostream>
#include <windows.h>
// 정렬의 조건을 만들어 주는 함수
// 오름차순
int QuickSort1(const void *arg1, const void *arg2 ) {
int *p1 = (int*)arg1; // arg1를 int타입의 주소로 봐라 (주소전달, 값전달)
int *p2 = (int*)arg2; // arg2를 int타입의 주소로 봐라
// (앞의 인수 - 뒤의 인수)라는 표현을 사용하게되면 슌차정렬을 하라는 것.
return (*p1 - *p2);
}
// 내림차순
int QuickSort2(const void *arg1, const void *arg2) {
int *p1 = (int*)arg1; // arg1를 int타입의 주소로 봐라 (주소전달, 값전달)
int *p2 = (int*)arg2; // arg2를 int타입의 주소로 봐라
// (앞의 인수 - 뒤의 인수)라는 표현을 사용하게되면 슌차정렬을 하라는 것.
return (*p2 - *p1);
}
// ( > ) 순차정렬
// ( < ) 역순정렬
int QuickSort3(const void *arg1, const void *arg2) {
int *p1 = (int*)arg1; // arg1를 int타입의 주소로 봐라 (주소전달, 값전달)
int *p2 = (int*)arg2; // arg2를 int타입의 주소로 봐라
if (*p1 > *p2) {
return +1;
}
else {
return -1;
}
// 삼항연산자로 바꾼다면
// return(*p1 > *p2) ? +1 : -1;
}
struct STRU {
int index;
int data[3];
};
int QuickSort4(const void *arg1, const void *arg2) {
STRU *p1 = (STRU*)arg1; // arg1를 int타입의 주소로 봐라 (주소전달, 값전달)
STRU *p2 = (STRU*)arg2; // arg2를 int타입의 주소로 봐라
return (p1->index - p2->index);
}
#include "time.h"
int main()
{
srand((unsigned)time(NULL));
STRU DataInfo[6];
for (int i = 0; i < 6; i++)
{
DataInfo[i].index = rand() % 10;
for (int j = 0; j < 3; j++)
{
DataInfo[i].data[j] = rand() % 50 + 50;
}
}
// 출력
for (int i = 0; i < 6; i++)
{
printf("%d : ", DataInfo[i].index);
for (int j = 0; j < 3; j++)
{
printf("%d : ", DataInfo[i].data[j]);
}
printf("\n");
}
printf("\n");
qsort(DataInfo, 6, sizeof(STRU), QuickSort4);
// 정렬 후
for (int i = 0; i < 6; i++)
{
printf("%d : ", DataInfo[i].index);
for (int j = 0; j < 3; j++)
{
printf("%d : ", DataInfo[i].data[j]);
}
printf("\n");
}
printf("\n");
}
[문제: 프로야구 승률에 따른 역순정렬]
프로야구 5개 구단
팀 전 승 무 패 승률
삼성 40 22 2 16
엘지
현대
한화
롯데
** 조건: (승률 = 승/전) 2회무승부 = 1승
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <Windows.h>
#include <time.h>
#include <math.h>
struct STRUBASEBALL
{
char Team[10] = { 0, };
int win = 0;
int draw = 0;
int lose = 0;
};
int QuickSortPlay(const void* arg1, const void* arg2)
{
STRUBASEBALL* p1 = (STRUBASEBALL*)arg1;
STRUBASEBALL* p2 = (STRUBASEBALL*)arg2;
return (p2->win - p1->win);
}
int main()
{
//STRUBASEBALL samsung, LG, HanHwa, Lotte, SK;
srand((unsigned)time(NULL));
STRUBASEBALL Game[5];
for (int i = 0; i < 5; i++)
{
for (int j = i + 1; j < 5; j++)
{
for (int n = 0; n < 10; n++)
{
int rate = rand() % 100;
if (rate >= 55)
{
Game[i].win++;
Game[j].lose++;
}
else if (rate <= 45)
{
Game[i].lose++;
Game[j].win++;
}
else
{
Game[i].draw++;
Game[j].draw++;
}
}
}
switch (i)
{
case 0:
strcpy(Game[i].Team, "SamSung");
break;
case 1:
strcpy(Game[i].Team, "LG");
break;
case 2:
strcpy(Game[i].Team, "Lotte");
break;
case 3:
strcpy(Game[i].Team, "Doosan");
break;
case 4:
strcpy(Game[i].Team, "KT");
break;
}
}
for (int i = 0; i < 5; i++)
{
printf("%s\t => win : %d || draw : %d || lose : %d\n",
Game[i].Team, Game[i].win, Game[i].draw, Game[i].lose);
} printf("\n");
qsort(Game, 5, sizeof(STRUBASEBALL), QuickSortPlay);
for (int i = 0; i < 5; i++)
{
float winrate;
winrate = ((Game[i].win + (Game[i].draw % 2)) / 40.f) * 100.f;
printf("%s\t => win : %d || draw : %d || lose : %d || winrate : %0.2f%%\n",
Game[i].Team, Game[i].win, Game[i].draw, Game[i].lose, winrate);
}
}
728x90
반응형
'Education > Edu | .net' 카테고리의 다른 글
# 17.1) [MFC] 시작하기7 (Tab Control) (0) | 2021.01.27 |
---|---|
# 16) [C/C++] 알고리즘1 (0) | 2021.01.26 |
# 14.2) [MFC] 모달리스 다이얼로그(Modeless dialog) 공유 (3) | 2021.01.22 |
# 14.1) [MFC] 시작하기6 (0) | 2021.01.22 |
# 13) [MFC] 다이얼로그 간 데이터 교환, 통신 (0) | 2021.01.22 |