搜尋:線性搜尋、二分搜尋、雜湊搜尋(雜湊還未完成)
阿新 • • 發佈:2018-11-02
題目:
請編寫一個程式,輸入包含n個整數的數列A以及包含q個不重複整數數列T,請輸出A和T的交集元素的個數
一、線性搜尋
#include "pch.h" #include <stdio.h> int search(int A[], int n, int key) { int i = 0; A[n] = key;//注意這一步:新增標記,相當於設定尋找到位置 while (A[i] != key) { i++; } return i != n;//i==n說明沒找到,i!=n說明找到了 } int main() { int i, n, A[10000 + 1], q, key, sum = 0; scanf_s("%d", &n); for (i = 0; i < n; i++) { scanf_s("%d", &A[i]); } scanf_s("%d", &q); for (i = 0; i < q; i++) { scanf_s("%d", &key); if (search(A, n, key)) { sum++; } } printf("%d\n", sum); return 0; }
二、二分搜尋
1、待搜尋序列需要有序:升序、降序
2、三個指標:left、right、mid = (left+right)/2
- 將mid所指的元素A[mid]與key進行比較,一致則返回mid
- 若key<A[mid]:則right = mid —> mid= (left+right)/2,更新mid,搜尋範圍縮小後半部分
演算法複雜度:O(logn)
#include "pch.h" #include <iostream> #include<stdio.h> int A[1000000], n; int binarySearch(int key) { int left = 0; int right = n; int mid; while (left < right) { mid = (left + right) / 2; if (key == A[mid]) { return 1; } if (key > A[mid]) { left = mid + 1; } else { right = mid; } } return 0; } int main() { int i, q, k, sum = 0; scanf_s("%d", &n); for (i = 0; i < n; i++) { scanf_s("%d", &A[i]); } scanf_s("%d", &q); for (i = 0; i < q; i++) { scanf_s("%d", &k); if (binarySearch(k)) { sum++; } } printf("%d\n", sum); return 0; }
三、雜湊法
題目:實現字典,可向字典中新增字串,也可查詢字串是否在字典中
雜湊法:根據各個元素的值來確定儲存位置,然後將位置保管在散列表中。