C++的一些常用函数
C++ 的一些常用函数
顺序查找
int sequentialSearch(T a[], int n, const T& x)
template<class T>
int sequentialSearch(T a[], int n, const T& x)
{
//如果找到,返回下标,否则返回 -1
int i;
for(i = 0; i < n && a[i] != x; i++)
if(i == n)
return -1;
else
return i;
}
//递归方法
template<class T>
int sequentialSearch(T a[], int n, const T& x)
{
//如果找到,返回下标,否则返回 -1
if(n < 1)
return -1;
if(a[n - 1] == x)
return n - 1;
return sequentialSearch(a[], n - 1, x);
}
indexOfMax(T a[], int n) 找最大值的下标
template<class T>
int indexOfMax(T a[], int n)
{//查找数组a[0:n-1]中的最大值的
if(n <= 0)
throw illegalParameterValue("n 必须大于 0");
int indexOfMax = 0;
for(int i = 1; i < n; i++)
{
if(a[indexOfMax] < a[i])
indexOfMax = i;
return indexOfMax;
}
}
排序
swap(T& x, T& y ) 交换
template<class T>
void Swap(T& x, T& y)
{
T temp;
temp = x;
x = y;
y = temp;
}
selectionSort(T a[], int n) 选择排序
template<class T>
void selectionSort(T a[], int n)
{//排序数组 a[0:n-1]
for(int size = n; size > 1; size--)
{
int i = indexOfMax(a, size);
Swap(a[i], a[size - 1]);
}
}
selectionSortPlus(T a[], int n) 及时终止选择排序
template<class T>
void selectionSortPlus(T a[], int n)
{
boole sort = false;
for(int i = n; !sort && (i > 1); i--)
{
int indexOfMax = 0;
sotr = true;
for(int j = 1; j < i; j++)
{
if(a[indexOfMax] <= a[j])
indexOfMax = j;
else
sort = false;//无序
}
Swap(a[indexOfMax], a[j - 1]);
}
}
及时终止选择排序,最好情况下外部 for 循环只走一次,比较次数为 n-1。最坏情况下,比较次 数为(n-1)n/2,并且速度比选择排序要慢一些。
bubbleSort(T a[], int n)冒泡排序
template<class T>
void bubbleSort(T a[], int n)
{
for(int i = n; i > 1; i--)
for(int j = 0; j < n - 1; j ++)
{
if(a[j] > a[j + 1])
Swap(a[j], a[j + 1]);
}
}
bubbleSort(T a[], int n) 及时终止冒泡排序
template<class T>
bool bubble(T a[], int n)
{
bool swap = false;
for(int i = 0; i < n - 1; i++)
{
if(a[i] > a[i + 1])
{
Swap(a[i], a[i + 1]);
swap = true;//发生交换
}
}
return swap;
}
template<class T>
void bubbleSort(T a[], int n)
{
for(int i = n; i > 1 && bubble(a, i); i--)
{
}
}
最坏情况比较次数:n(n-1)/2;最好情况比较次数:n-1。
insertionSort(T a[], int n) 插入排序
template<class T>
void insertionSort(T a[], int n)
{
for(int i = 1; i < n; i++)
{//把 a[i] 插入 a[0:i-1]
T t = a[i];
int j;
for(j = i - 1; j >= 0 && t < a[j]; j--)
{
a[j + 1] = a[j];
}
a[j + 1] = t;
}
}
最坏情况比较次数:n(n-1)/2;最好情况比较次数:n-1。
矩阵转置
transpose(T **a, int rows) 矩阵转置
template<class T>
void transpose(T **a, int rows)
{//矩阵a[n][n] 转置
for(int i = 0; i < rows; i++)
{
for(int j = i + 1; j < rows; j++)
{
Swap(a[i][j], a[j][i]);
}
}
}
matrixAdd(T **a, T **b, T **c, int rows, int cols) 矩阵加法
template<class T>
void matrixAdd(T **a, T **b, T **c, int rows, int cols)
{
for(int i = 0; i < rows; i++)
{
for(int j =0; j <cols; j++)
{
c[i][j] = a[i][j] + b[i][j];
}
}
}
持续更新。。。。。。