排序算法-查找算法
排序算法
冒泡排序
template<class T>
void BubbleSort(T *array, const int length)
{
???????? for (int i = 0; i <length-1; i++)
???????? {
?????????????????? for (int j = i+1; j <length; j++)
?????????????????? {
??????????????????????????? if (array[i]> array[j])
???????????????????????????????????? std::swap(array[i], array[j]);
?????????????????? }
???????? }
}
選擇排序
template<class T>
void SelectSort(T *array, const int length)
{
???????? for (int i = 0; i < length; i++)
???????? {
?????????????????? int min = i;
?????????????????? for (int j = i + 1; j < length; j++)
?????????????????? {
??????????????????????????? if (array[j] < array[min])
???????????????????????????????????? min = j;
?????????????????? }
?????????????????? std::swap(array[i], array[min]);
???????? }
}
?
?
?
查找算法
順序查找
template<class T>
int SequentSearch(T *array, const int length,const T x)
{
???????? int i;
???????? for (i = 0; i < length; i++)
???????? {
?????????????????? if (array[i] == x)
??????????????????????????? return i;
???????? }
???????? return -1;
}
二分查找
template<class T>
int BinarySearch(T *array, const int length, const T x)
{
???????? int low, hight, mid;
???????? low = 0, hight = length - 1;
?
???????? while (low <= hight)
???????? {
?????????????????? mid = (low + hight) / 2;
?????????????????? if (array[mid] == x)
??????????????????????????? return mid;
?????????????????? else if (array[mid] < x)
??????????????????????????? low = mid + 1;
?????????????????? else if (array[mid] >x)
??????????????????????????? hight = mid - 1;
???????? }
???????? return -1;
}
?
?
?
?
遞歸算法
遞歸二分查找算法
template<class T>
int Recursive_BinarySearch(T * array, const int length, const T x,const int left ,const int right)
{
???????? if (left <= right)
???????? {
?????????????????? int mid = (left + right) / 2;
?????????????????? if (x < array[mid])
??????????????????????????? return Recursive_BinarySearch(array, length, x, left, mid - 1);
? ? ? ? ? ? ? ? ? ? ? ? ? ?// 注意函數(shù)前需要加一個(gè)return,沒(méi)加return,結(jié)果不正確
?????????????????? else if(x > array[mid])
??????????????????????????? return Recursive_BinarySearch(array, length, x, mid+ 1, right);
?????????????????? else return mid;
???????? }
???????? return-1;
}
?
遞歸實(shí)現(xiàn)排列組合問(wèn)題
template<class T>
void Permutations(T * array,int left,int right)
{
???????? if (left == right)
???????? {
?????????????????? for (int i = 0; i < right; i++)
??????????????????????????? cout << array[i];
?????????????????? cout << endl;
???????? }
???????? else
???????? {
?????????????????? for (int i = left; i < right; i++)
?????????????????? {
??????????????????????????? std::swap(array[left], array[i]);
??????????????????????????? Permutations(array,left+1,right);
??????????????????????????? std::swap(array[left], array[i]);
?????????????????? }
???????? }
}
#include<iostream> using namespace std;//排序算法 template<class T> void BubbleSort(T *array, const int length);//冒泡 template<class T> void B_sort(T *array, const int length); template<class T> void SelectSort(T *array, const int length);//選擇//T *array,使用指針,速度快,傳遞的數(shù)數(shù)組的地址,T array[],這種寫(xiě)法為傳值,需要大量復(fù)制數(shù)據(jù)//查找算法 template<class T> int SequentSearch(T *array, const int length, const T x);//順序查找,沒(méi)排序的數(shù)據(jù) template<class T>int Recursive_BinarySearch(T *array, const int length, const T x,const int left=0,const int right=0);//遞歸二分查找,排序的數(shù)據(jù) template<class T>int BinarySearch(T *array, const int length, const T x);//二分查找,排序的數(shù)據(jù) template<class T>void Permutations(T *array,int left,int right);//實(shí)現(xiàn)數(shù)組中元素的所有組合 int main() {double a[] = { 1.1,1.9,2.5,9.2,9.5,4.0,3.2,4.5,6.7,8.4 };BubbleSort(a, 10); cout << "冒泡排序:" << endl;for (int i = 0; i < 10; i++){cout << a[i] << endl;}B_sort(a, 10); cout << "冒泡排序:" << endl;for (int i = 0; i < 10; i++){cout << a[i] << endl;}int b[] = {5,6,1,4,8,3,6,7,2,9,0 };SelectSort(b, 10); cout << "選擇排序:" << endl;for (int i = 0; i < 10; i++){cout << b[i] << endl;}double x = 4.0;int i = SequentSearch(a, 10, x);if (i > 0){cout << "順序查找:" << endl; cout << i<<","<<a[i] << endl;}int y =8;int j = BinarySearch(b, 10,y);if (j> 0)cout << j<< "," << b[j] << endl;double z =5;int k = Recursive_BinarySearch(a, 10,z,0,10);if (k > 0){cout << "遞歸查找:" << endl;cout << k << "," << b[k] << endl;}char ch[] = { 'a','b','c' };cout << "字母組合:" << endl;Permutations(ch,0, 3);system("pause");return 0; }template<class T> void BubbleSort(T *array, const int length) {for (int i = 0; i < length; i++){for (int j = 0; j < length - 1 - i; j++){if(array[j]> array[j+1])std::swap(array[j],array[j+1]);}} }template<class T> void B_sort(T *array, const int length) {for (int i = 0; i <length-1; i++){for (int j = i+1; j <length; j++){if (array[i]> array[j])std::swap(array[i], array[j]);}} }template<class T> void SelectSort(T *array, const int length) {for (int i = 0; i < length; i++){int min = i;for (int j = i + 1; j < length; j++){if (array[j] < array[min])min = j;}std::swap(array[i], array[min]);} }template<class T> int SequentSearch(T *array, const int length,const T x) {int i;for (i = 0; i < length; i++){if (array[i] == x)return i;}return -1; }template<class T> int Recursive_BinarySearch(T * array, const int length, const T x,const int left ,const int right) {if (left <= right){int mid = (left + right) / 2;if (x < array[mid])return Recursive_BinarySearch(array, length, x, left, mid - 1);// 注意函數(shù)前需要加一個(gè)return,沒(méi)加return,結(jié)果不正確else if(x > array[mid])return Recursive_BinarySearch(array, length, x, mid+ 1, right);else return mid;}return-1; }template<class T> int BinarySearch(T *array, const int length, const T x) {int low, hight, mid;low = 0, hight = length - 1;while (low <= hight){mid = (low + hight) / 2;if (array[mid] == x)return mid;else if (array[mid] < x)low = mid + 1;else if (array[mid] >x)hight = mid - 1;}return -1; }template<class T> void Permutations(T * array,int left,int right) {if (left == right){for (int i = 0; i < right; i++)cout << array[i];cout << endl;}else{for (int i = left; i < right; i++){std::swap(array[left], array[i]);Permutations(array,left+1,right);std::swap(array[left], array[i]);}} }結(jié)果:
?
?
?
?
?
?
?
?
?
總結(jié)
- 上一篇: 【计算机网络复习 物理层】2.1.3 码
- 下一篇: 第十届蓝桥杯 等差数列(Python)