Data Structure
  • 資料結構自學筆記
  • 1 - Stack & Queue
    • 1.1 - Stack
    • 1.2 - Queue
    • 1.3 - Stack and Queue
  • 2 - Tree & Binary Tree
    • 2.1 - Tree
    • 2.2 - Binary Tree
    • 2.3 - Binary Tree Traversal
    • 2.4 - Binary Search Tree
    • 2.5 - Heap
    • 2.6 - Thread Binary Tree
    • 2.7 - Tree and Binary Tree Conversion
    • 2.8 Advanced Trees
      • 2.8.1 - Min-Max Heap
      • 2.8.2 - Deap
      • 2.8.3 - Symmetric Min-Max Heap
      • 2.8.4 - Extended Binary Tree
      • 2.8.5 - AVL Tree
      • 2.8.6 - M-Way Search Tree
      • 2.8.7 - B Tree
      • 2.8.8 - Red-Black Tree
      • 2.8.9 - Optimal Binary Search Tree
      • 2.8.10 - Splay Tree
      • 2.8.11 - Leftest Heap
      • 2.8.12 - Binomial Heap
  • 3 - Search & Sort
    • 3.1 - Searching
    • 3.2 - Elementary Sorting
      • 3.2.1 - Insertion Sort
      • 3.2.2 - Selection Sort
      • 3.2.3 - Bubble Sort
      • 3.2.4 - Shell Sort
    • 3.3 - Sophisticated Sorting
      • 3.3.1 - Quick Sort
      • 3.3.2 - Merge Sort
      • 3.3.3 - Heap Sort
      • 3.3.4 - Radix Sort
      • 3.3.5 - Bucket Sort
      • 3.3.6 - Counting Sort
    • 3.4 - Summary
  • 4 - Graph
    • 4.1 - Intro
    • 4.2 - Graph Traversal
    • 4.3 - Spanning Tree
      • 4.3.1 - Kruskal's algorithm
      • 4.3.2 - Prim's algorithm
      • 4.3.3 - Sollin's algorithm
    • 4.4 - Shortest Path Length
      • 4.4.1 - Dijkstra's algorithm
      • 4.4.2 - Bellman-Ford algorithm
      • 4.4.3 - Floyd-Warshall algorithm
    • 4.5 - AOV Network
    • 4.6 - AOE Network
    • 4.7 - Others
Powered by GitBook
On this page
  • 1. Linear Search(Sequencial Search)
  • 2. Binary Search
  1. 3 - Search & Sort

3.1 - Searching

介紹Linear Search和Binary Search

1. Linear Search(Sequencial Search)

從頭到尾一一比較每一筆資料直到找到目標或是搜尋完範圍仍找不到為止。

  1. 資料不需事先排序過

  2. 資料可存放於Linklist(Sequencial Access)或是Array(Random Access)

  3. 時間複雜度: O(n) (平均比較次數 =1+2+..+nn=\frac{1+2+..+n}{n}=n1+2+..+n​ )

  4. 適合資料少使用

2. Binary Search

  1. 資料必須事先由小到大排序過

  2. 資料必須使用Array儲存

2.1 Iterative

int BinarySearch(char *str, char key){
    int high = strlen(str);
    int low = 0;
    int mid;
    while(low <= high){
        mid = (low + high)/2;
        if (key == str[mid]) return mid;
        if (key > str[mid]) low = mid + 1;
        if (key < str[mid]) high = mid - 1;
    }
    return -1; //not found
}

2.2 Recursive

int BinarySearch(char *str, char key, int high, int low){
    int mid = (low + high)/2;
    if (key == str[mid]) return mid;
    if (key > str[mid]) return BinarySearch(str, key, high, mid + 1);
    if (key < str[mid]) return BinarySearch(str, key, mid - 1, low);
    return -1;
}

時間複雜度分析:

T(n)=1+T(n2) =1+(1+T(n4)) =2+(1+T(n8))... =log⁡n+T(1)T(n)=1+T(\frac{n}{2})\\ \quad\quad\ =1+(1+T(\frac{n}{4}))\\ \quad\quad\ =2+(1+T(\frac{n}{8}))...\\ \quad\quad\ =\log n+T(1)T(n)=1+T(2n​) =1+(1+T(4n​)) =2+(1+T(8n​))... =logn+T(1)

Time = O(logn)

Previous3 - Search & SortNext3.2 - Elementary Sorting

Last updated 6 years ago