[ Arrays for search, insert, delete ] Packed sorted

2024. 4. 10. 01:29·CS/Data Structure
728x90
반응형

Packed sorted

  • 정렬이 되어있다는 것을 가정하므로 search 시 binary search를 사용할 수 있음
  • item의 개수를 표시하는 변수가 필요함 (packed의 특징)
  • insert : search를 통해 계속 좁혀오다가, 두 개의 리턴 값을 보낼 수 있음 (그 사이 혹은 그 곳에 insert)
#include <stdio.h>

int a[100] = {0};
int size = 0;
int r, l, m;

int arr_search(int a[], int n, int x){
    int s, e, m;
    s = 0;
    e = n-1;
    while(s <= e){
        m = (s+e)/2;
        if(a[m] == x){
            r = l = m;
            return 1;
        }
        else if(a[m] > x) e = m-1;
        else s = m+1;
    }
    l = e;
    r = s;
    return -1;
}

void arr_insert(int a[], int n, int x){
    for(int i = size; i >= r; i--){
        a[i+1] = a[i];
    }
    a[r] = x;
    size++;
}

void arr_delete(int a[], int n, int x){
    for(int i = r; i < size; i++){
        a[i] = a[i+1];
    }
    size--;
}


int main(int argc, const char * argv[]) {
    
    int x;
    char choose;
    while(1){
        // 배열 출력
        for(int i = 0; i < size; i++) printf("%2d ", i);
        printf("\n");
        for(int i = 0; i < size; i++) printf("%2d ", a[i]);
        printf("\n");
        
        scanf(" %c", &choose);
        //search
        if (choose == 's'){
            scanf("%d", &x);
            int check = arr_search(a, size, x);
            if(check == -1) printf("There is no %d\n", x);
            else printf("There is %d in index %d\n", x, m);
        }
        
        //insert
        if (choose == 'i'){
            scanf("%d", &x);
            if(arr_search(a,size,x) == -1) {
                arr_insert(a,size,x);
                printf("%d is inserted in index %d\n", x, r);
            }
            else printf("already exists %d\n", x);
        }
        
        //delete
        if (choose == 'd'){
            scanf("%d", &x);
            if(arr_search(a,size,x) != -1) {
                arr_delete(a,size,x);
                printf("%d is deleted\n", x);
            }
            else printf("There is no %d\n", x);
        }
        
        //quit
        if (choose == 'q'){
            break;
        }
    }
}

 

*이진 탐색을 코딩하면서 논리적 오류가 발생함 > 재귀함수로는 구현이 힘든지 다시 한번 확인해야할 듯함

 

실행결과

 

  • 정렬이 되어있음을 가정하므로 이진 탐색을 사용하여 search 함수를 구현하였다
  • insert : 입력받은 수보다 큰 수들을 한 칸씩 뒤로 미루고, 그 칸에 입력받은 수를 넣는다. 배열의 크기 +1
  • delete : 입력받은 수보다 큰 수들은 앞으로 한칸씩 땡기고, 배열의 크기 -1

성능

  • Search : O(log n) - binary search
  • insert : [search O(log n)] O(n) - n개 만큼 뒤로 미루는 연산이 필요함
  • delete : [search O(log n)] O(n) - n개 만큼 앞으로 땡기는 연산이 필요함
728x90
반응형

'CS > Data Structure' 카테고리의 다른 글

String Matching  (0) 2024.04.12
[ Arrays for search, insert, delete ] Unpacked unsorted & Unpacked sorted  (1) 2024.04.10
[ Arrays for search, insert, delete ] Packed unsorted  (3) 2024.04.09
Merge Sort  (2) 2024.04.09
Selection Sort  (1) 2024.03.30
'CS/Data Structure' 카테고리의 다른 글
  • String Matching
  • [ Arrays for search, insert, delete ] Unpacked unsorted & Unpacked sorted
  • [ Arrays for search, insert, delete ] Packed unsorted
  • Merge Sort
min_zu
min_zu
  • min_zu
    민주제도
    min_zu
  • 전체
    오늘
    어제
    • ._. (176)
      • AI (2)
        • DeepLearning (2)
        • CS231n (0)
      • Web (2)
        • ReactJS (0)
      • CS (83)
        • OS (7)
        • Data Structure (23)
        • Computer Architecture (8)
        • Computer Network (20)
        • Algorithm (25)
      • Linux (3)
        • KaliLinux (0)
        • Docker (1)
      • Hacking (83)
        • Write Up (25)
        • Pwnable (13)
        • Reversing (2)
        • Cryptography (12)
        • Web Hacking (4)
        • Window (6)
        • Network (7)
        • Web3 (13)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    UTM
    Web
    DeepLearning
    OS
    AI
    Search
    DataStructure
    Sort
    ComputerArchitecture
    Graph
    Tree
    Mac
    WinAFL
    Linux
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
min_zu
[ Arrays for search, insert, delete ] Packed sorted
상단으로

티스토리툴바