顺序查找
//顺序查找
template<class T>
int sequentialSearch(T a[],int n,const T&x){
//在数组a[0:n-1]中查找元素x
//如果找到,则返回该元素的位置,否则返回-1
int i;
for(i=0;i<n&&a[i]!=x;i++);
if(i==n)return -1;
return i;
}
在有序数组插入一个元素
//在一个有序数组插入一个元素
template<class T>
void insert(T a[],int &n,const T&x){
int i;
for(i=n-1;i>=0&&a[i]>x;i--){
a[i+1]=a[i];
}
a[i+1]=x;
n++;
}
选择排序
简化版
//选择排序:依次找到最大的元素
template<class T>
void selectionSort(T a[],int n){
//给a[0:n-1]排序
for(int size=n;size>1;size--){
int j=indexofMax(a,size);
swap(a[j],a[size-1]);
}
}
及时终止的选择排序
//及时终止的选择排序
template<class T>
void selectionSort(T a[],int n){
bool sorted=false;
//找到size对应的数字
for(int size=n;!sorted&&(size>1);size--){
int indexofMax=0;
for(int i=1;i<size;i++){
if(a[indexofMax]<a[i])indexofMax=i;
else sorted=false;
}
swap(a[indexofMax],a[size-1]);
}
}
冒泡排序
普通版
//冒泡排序
//一次冒泡过程
template<class T>
void bubble(T a[],int n){
for(int i=0;i<n;i++){
if(a[i]>a[i+1])swap(a[i],a[i+1]);
}
}
template<class T>
void bubblesort(T a[],int n){
for(int i=n;i>1;i++){
bubble(a,i);
}
}
及时终止的冒泡排序
//及时终止的冒泡排序
template <class T>
bool bubble(T a[],int n){
bool swapped=false;//目前为止未交换
for(int i=0;i<n-1;i++){
if(a[i+1]<a[i]){
swapped=true;
swap(a[i+1],a[i]);
}
}
return swapped;
}
template<class T>
void bubblesort(T a[],int n){
//及时终止冒泡排序
for(int i=n;i>1&&bubble(a,i);i--);
}
原地重排数组
名次存在于r[]
//原地重排数组,名次存于r[]
template<class T>
void rearrange(T a[],int n,int r[]){
for(int i=0;i<n;i++){
while (r[i]!=i)
{
int t=r[i];
swap(a[t],a[i]);
swap(r[t],r[i]);
}
}
}
插入排序
1.第一种
//插入排序
template<class T>
void insert(T a[],int n,const T&x){
for(int i=n-1;i>=0&&x<a[i];i--){
a[i+1]=a[i]
}
a[i+1]=x;
}
template<class T>
void insertsort(T a[],int n){
for(int i=0;i<n;i++){
T t=a[i];
insert(a,i,t);
}
}
2.另外一种
//另外一种插入排序
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(int j=i-1;j>=0&&t<a[j];j--){
a[j+1]=a[j];
}
a[j+1]=t;
}
}