728x90
반응형
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 101
#define SWAP(x,y,t) (t=x,x=y,y=t)
void sort(int[], int);
void main() {
int i, n, list[MAX_SIZE];
printf("Enter the number of numbers to generate:");
scanf_s("%d", &n);
if (n<1 || n>MAX_SIZE) {
printf("ERROR");
}
for (i = 0; i < n; i++) { //n개의 정수를 랜덤으로 생성
list[i] = rand() % 1000;
printf("%d ", list[i]);
}
sort(list, n);
printf("\n Sorted array:\n");
for (i = 0; i < n; i++) {
printf("%d ", list[i]);
}
printf("\n");
}
void sort(int list[], int n) { //선택정렬
int i, j, min, temp;
for (i = 0; i < n - 1; i++) {
min = i;
for (j = i + 1; j < n; j++)
if (list[j] < list[min])//더 작은 수를 만난 경우
min = j;//min 변경
SWAP(list[i], list[min], temp); //i번째 수와 가장 작은 수의 위치를 변경
}
}
데이터의 수가 n개일 때
n(n-1)/2 번 연산을 해야 함
이진 탐색
정렬되어있는 리스트가 있고 key가 주어졌을 때
list[i]=key인 i를 찾아 출력.
#include <stdio.h>
int binsearch(int list[], int key, int left, int right) {
int middle;
while (left <= right) {
middle = (left + right) / 2;
if (list[middle] == key) {
return middle;
}
else if (list[middle] > key) {
right = middle - 1;
}
else if (list[middle < key]) {
left = middle + 1;
}
}
return -1;
}
int main() {
int list[5] = { 10,20,30,40,50 };
int rs = binsearch(list, 30, 0, 5);
printf("%d",rs);
}
순열
#include <stdio.h>
#define SWAP(x,y,t) (t=x, x=y, y=t)
void perm(char* list, int i, int n) { //list[i]부터 list[n]까지의 원소로 구성된 모든 순열 출력
int j, temp;
if (i == n) {//배열의 길이가 1인 경우
for (j = 0; j <= n; j++) {
printf("%c", list[j]);
}
printf("\n");
}
else {
for (j = i; j <= n; j++) {
SWAP(list[i], list[j], temp);
perm(list, i + 1, n);//재귀
SWAP(list[i], list[j], temp); //원상복구
}
}
}
int main() {
char list[4] = { 'a','b','c','d'};
char temp;
perm(list, 0, 3);
}
728x90
반응형
'2022-2 > 자료구조' 카테고리의 다른 글
2장 - 희소 행렬(Sparse Matrix)의 표현 (1) | 2022.09.25 |
---|---|
2장 - 다항식의 덧셈 구현하기 (1) | 2022.09.25 |
배열과 구조체, 공용체, 순서리스트 (2) | 2022.09.21 |
마방진 그리기(홀수형) (0) | 2022.09.18 |
시간복잡도 (big - O,big - Omega,big - Theta) 표기법 (0) | 2022.09.17 |
댓글