基礎知識:
二分查詢演算法:有序表、順序儲存、複雜度o(logn),一般用於強調有序陣列查詢時。
雜湊表:o(1)時間根據關鍵字,得到所需的值。
二叉搜尋樹(排序樹):根節點左邊值小於根結點,右邊值大於根結點。
int binary_search(int* data, int length, int key)
return -1;
}
1 把乙個陣列最開始的若干個元素搬到陣列的末尾稱為陣列的旋轉。
輸入乙個遞增的排序陣列的旋轉,輸出旋轉陣列的最小元素。例如是的乙個旋轉,最小值為1.**
int
mininorder(int* data, int low, int high)
return min;
}int
getnumsmall(int* data, int length)
的情況,只能順序查詢最小值
return mininorder(data, low, high);
if (data[mid] >= data[high])
low = mid;
else
if(data[mid]<=data[high])
high = mid;
}return data[high];
}
2 數字在排序陣列中出現的次數
統計乙個陣列在排序陣列中出現的次數,例如輸入,和數字3,輸出4。
int getfirstk(int* data, int k, int start, int end) //遞迴寫法
else
if (data[mid] > k)
end = mid - 1;
else
start = mid + 1;
return getfirstk(data, k, start, end);
}int getfirstk(int* data, int k, int start, int end) //迴圈寫法
else
if (data[mid] > k)
end = mid - 1;
else
start = mid + 1;
}return -1;
}int getlastk(int* data,int
length, int k, int start, int end)
else
if (data[mid] > k)
end = mid - 1;
else
start = mid + 1;
return getlastk(data,length, k, start, end);
}int getnumk(int* data, int
length, int k)
return number;
}
3 第乙個只出現一次的字元;
for (int i = 0; i < s.size(); ++i)
hash[s[i]]++;
for (int i = 0; i < s.size(); ++i)
return
'\0';}
4 二叉搜尋樹的後序遍歷序列
輸入乙個整數陣列,判斷是否為某二叉搜尋樹的後序遍歷序列。假設輸入陣列的任意兩個數字不相同。
bool isbst(int data, int
length)
for (j = i; j < length; ++j)
bool left = true;
if (i > 0)
left = isbst(data, i);
bool right = true;
if (j < length - 1)
right = isbst(data+i, length-1-i);
return (left&&right);
}
資料結構之查詢演算法總結筆記
查詢演算法 一 查詢的基本概念 查詢,也可稱檢索,是在大量的資料元素中找到某個特定的資料元素而進行的工作。查詢是一種操作。二 順序查詢 針對無序序列的一種最簡單的查詢方式。時間複雜度為o n 三 折半查詢 針對已排序序列的一種查詢方式。並且只適用於順序儲存結構的序列。要求序列中的元素基本不變,在需要...
資料結構之查詢演算法總結筆記
查詢演算法 一 查詢的基本概念 查詢,也可稱檢索,是在大量的資料元素中找到某個特定的資料元素而進行的工作。查詢是一種操作。二 順序查詢 針對無序序列的一種最簡單的查詢方式。時間複雜度為o n 三 折半查詢 針對已排序序列的一種查詢方式。並且只適用於順序儲存結構的序列。要求序列中的元素基本不變,在需要...
資料結構之查詢演算法
在日常生活中,幾乎每天都要進行一些查詢的工作,在 簿中查閱某個人的 號碼 在電腦的資料夾中查詢某個具體的檔案等等。本節主要介紹用於查詢操作的資料結構 查詢表。查詢表是由同一型別的資料元素構成的集合。例如 號碼簿和字典都可以看作是一張查詢表。一般對於查詢表有以下幾種操作 在查詢表中只做查詢操作,而不改...