일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- java
- Flutter
- 비즈니스일본어
- nico
- 건담베이스
- springboot
- CSS
- 연습문제
- 건담
- DART
- 日本語
- rails7
- Web
- vscode
- 単語
- rails
- Python
- html
- ruby
- 반다이몰
- javascript
- 디지몬
- 자바
- Spring
- 일본어
- メソッド
- C로 시작하는 컴퓨터 프로그래밍4판
- jsp
- 一日一つメソッド
- 인프런
Archives
- Today
- Total
AR삽질러
C로 시작하는 컴퓨터 프로그래밍4판 - 13장 실전예제(데이터 정렬 프로그램) 본문
728x90
01. 데이터 정렬 프로그램
- 정렬 알고림즘 성능 비교하기
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX_NUM 10000
void Select_Sort(int* a, int count);
void Bubble_Sort(int* a, int count);
void Insert_Sort(int* a, int count);
void Shell_Sort(int* a, int count);
void Quick_Sort(int* a, int count);
// 난수 발생 함수
void Rand_Date(int* a);
int Random(int start, int end);
// 속도 비교 함수
void Check_Speed(int num, char* str, int* a, int count);
int main(void) {
int date[MAX_NUM];
int i;
char* str[] = { "Select", "Bubble", "Insert", "Shell", "Quick" };
Rand_Date(date);
for (i = 0; i < 5; i++)
Check_Speed(i, str[i], date, MAX_NUM);
return 0;
}
void Select_Sort(int* a, int count) {
int i, j;
int min_value, min_index;
for (i = 0; i < count; i++) {
min_index = i;
min_value = a[i];
for (j = i + 1; j < count; j++) {
if (min_value > a[j]) {
min_index = j;
min_value = a[j];
}
}
a[min_index] = a[i];
a[i] = min_value;
}
}
void Bubble_Sort(int* a, int count) {
int i, j;
int temp;
for (i = 0; i < count - 1; i++) {
for (j = 1; j < count - i; j++) {
if (a[j - 1] > a[j]) {
temp = a[j - 1];
a[j - 1] = a[j];
a[j] = temp;
}
}
}
}
void Insert_Sort(int* a, int count) {
int i, j;
int temp;
for (i = 1; i < count; i++) {
temp = a[i];
j = i;
while ((a[j - 1] > temp) && (j > 0)) {
a[j] = a[j - 1];
j = j - 1;
}
a[j] = temp;
}
}
void Shell_Sort(int* a, int count) {
int i, j, inc, h;
int temp;
for (h = count / 2; h > 0; h /= 2) {
for (i = 0; i < h; i++) {
for (j = i + h; j < count; j += h) {
temp = a[j];
inc = j;
while (inc > h - 1 && a[inc - h] > temp) {
a[inc] = a[inc - h];
inc = inc - h;
}
a[inc] = temp;
}
}
}
}
void Quick_Sort(int* a, int count) {
int i, j;
int v, temp;
if (count > 1) {
v = a[count - 1];
i = -1;
j = count - 1;
for (; ; ) {
while (a[++i] < v);
while (a[--j] > v);
if (i >= j) break;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
temp = a[i];
a[i] = a[count - 1];
a[count - 1] = temp;
Quick_Sort(a, i);
Quick_Sort(a + i + 1, count - i - 1);
}
}
void Rand_Date(int* a) {
int i;
srand((unsigned)time(NULL));
for (i = 0; i < MAX_NUM; i++) {
a[i] = Random(1, MAX_NUM);
}
}
int Random(int start, int end) {
int rnd = 0;
rnd = rand() & (end - start) + start;
return rnd;
}
void Check_Speed(int num, char* str, int* a, int count) {
clock_t start, end;
int temp[MAX_NUM];
int i;
for (i = 0; i < count; i++) {
temp[i] = a[i];
}
start = clock();
switch (num) {
case 0:
Select_Sort(temp, count);
break;
case 1:
Bubble_Sort(temp, count);
break;
case 2:
Insert_Sort(temp, count);
break;
case 3:
Shell_Sort(temp, count);
break;
case 4:
Quick_Sort(temp, count);
break;
}
end = clock();
printf("%10s의 수행 시간은 %5ld입니다.\n", str, end - start);
}
728x90
반응형
LIST
'C' 카테고리의 다른 글
C_Programing_Project : 이진탐색트리 프로그램 (0) | 2023.07.24 |
---|---|
C로 시작하는 컴퓨터 프로그래밍4판 - 13장 실전예제(면적구하프로그램) (0) | 2023.06.22 |
C로 시작하는 컴퓨터 프로그래밍4판 - 12장 파일처리와 메크로 (0) | 2023.06.22 |
C로 시작하는 컴퓨터 프로그래밍4판 - 11장 구조체와 열거형 (0) | 2023.06.22 |
C로 시작하는 컴퓨터 프로그래밍4판 - 10장 Pointer (0) | 2023.04.25 |