2011년7월1일_버블정렬, 배열복사방법
★ 일이란 없는 것을 만드는게 아니라 널린 것으로 만듬. (응용) 우리는 엔지니어이지 과학자가 아니다. 더 응용을 잘하여 사용자에게 얼마나 더 가까운가?에 따라 성공률이 달라진다. 보다 빨리 만들고 보다 이쁘게 디자인하면 성공할 것이다. (내생각엔 마지막에 운이 따라줘야 할 것 같아.) |
● 버블정렬
내림차순정렬시 오름차순으로 정렬된 데이터는 최악의 조건으로 가장 오래걸리나,
임베디드C에 있는 소스코드는 검사코드가 없어 입력에 따른 시간차이가 없이 일정하다.
1: //버블정렬
2: void bubble_sort(int array[], int count)
3: {
4: int i, j;
5:
6: printf("array주소 %08X\n", array);
7: printf("&array주소 %08X\n", &array);
8:
9: for(i = 0 ; i < count - 1 ; i++)
10: {
11: for(j = 0 ; j < count - 1 - i ; j++)
12: {
13: if(array[j] < array[j + 1])
14: {
15: swap(&array[j], &array[j + 1]);
16: printVector(array, 5);
17: }
18: }
19:
20: putchar('\n');
21: }
22:
23: return ;
24: }
정렬이 되었는지 검사하는 코드,
1: /버블정렬(내림차순) + 검사코드
2: void bubble_sort(int array[], int count)
3: {
4: int i, j, flag_sorted = 1;
5:
6: printf("array주소 %08X\n", array);
7: printf("&array주소 %08X\n", &array);
8:
9: for(i = 0 ; i < count - 1 ; i++)
10: {
11: for(j = 0 ; j < count - 1 - i ; j++)
12: {
13: if(array[j] < array[j + 1])
14: {
15: swap(&array[j], &array[j + 1]);
16: printVector(array, 5);
17: flag_sorted = 0; //한 번이라도 교체했다면 정렬이 덜 되었다 표시.
18: }
19: }
20: //한 번도 교체되지 않으면 정렬이 되었으니 끝냄.
21: if(1 == flag_sorted)
22: {
23: break;
24: }
25: //다시 검사하기 위해 표식을 초기화
26: flag_sorted = 1;
27:
28: putchar('\n');
29: }
30:
31: return ;
32: }
● 배열복사방법
1: int a[5] = {5, 5, 5, 5, 5};
2: int b[5];
3: int i;
4:
5: b = a; // 상수라 대입불가. 배열은 int * const a (a[])
6: b[] = a[]; // 에러!, 선언시만 비울 수 있음.
7: b[5] = a[5]; // 인덱스초과, 하나의 원소만 복사.
8:
9: //방법1. for문
10: for(i = 0 ; 5 > i ; ++i)
11: {
12: b[i] = a[i];
13: }
14:
15: //방법2. memcpy()
16: #include <string.h> //추가해야됨.
17: memcpy(b, a, 5);
18:
19: //방법3.구조체
20: typedef struct {
21: int a[5];
22: } A;
23:
24: int main()
25: {
26: A V2, V1 = {{5, 5, 5, 5, 5}};
27:
28: V2 = V1;
29:
30: return 0;
31: }
나는 방법1을 써왔었다. memcpy( )라는 메모리복사함수를 알았으니 앞으로는 자주 애용할 것이다. (방법2)
방법3은 학생들이 즐겨 쓰는 법이라고 한다. 그다지 좋지 않은 것 같으나…
구조체 복사는 알아 두는 것이 좋을 것이라 생각된다.
//보고서가 왜이리 허접하지 ^^;
'내장형하드웨어 > 정리문서' 카테고리의 다른 글
2011년10월27일_vi(비주얼 에디터)에서 비주얼스튜디오와 비슷하게 헤더파일에 어떻게 정의되어 있나 쉽게 알아보자! ctags사용 (0) | 2011.10.27 |
---|---|
2011년9월9일_소리의 속도를 구하는 엑셀시트를 이용해 AT91SAM7S256 MCU(ARM)에 내장된 타이머/카운터의 분주비와 비교매치인터럽트에 사용되는 RC레지스터의 값을 자동으로 구해보자. (2) | 2011.09.09 |
2011년9월7일_정리_소리의 속도 구하는 엑셀시트 (0) | 2011.09.08 |
2011년7월14일_저수준 파일입출력관련 함수와 옵션정리 (0) | 2011.07.15 |