前言:
总结一波!!!
一、查找
1.顺序查找
int Search_Seq( SSTable ST , KeyType key ){
//若成功返回其位置,否则返回0
ST.R[0].key =key;
for( i=ST.length; ; i-- )
if( ST.R[i].key==key ) return i;
}
2.折半查找
int Search_Bin(SSTable ST,KeyType key){
//若找到,则函数值为该元素在表中的位置,否则为0
low=1;high=ST.length;
while(low<=high){
mid=(low+high)/2;
if(key==ST.R[mid].key) return mid;
else if(key<ST.R[mid].key)
high=mid-1; //前半子表查找
else low=mid+1; //后半子表查找
}
return 0; //表中不存在待查元素
}
3.二叉排序树查找
BSTree SearchBST(BSTree T,KeyType key) {
if((!T) || key==T->data.key) return T;
else if (key<T->data.key)
return SearchBST(T->lchild,key);
//在左子树中继续查找
else return SearchBST(T->rchild,key); //在右子树中继续查找
} // SearchBST
4.哈希函数查找(这个在我的博客里面可以找到哦)
二、排序
1.直接插入排序
void InsertSort(SqList &L)
{
int i,j, n=L.length;
for(i=2;i<=n;++i)
{
L.r[0]=L.r[i]; // 复制为哨兵
for(j=i-1; L.r[0].key<L.r[j].key; --j)
L.r[j+1]=L.r[j]; // 记录后移
L.r[j+1]=L.r[0]; //插入到正确位置
}
}
2.折半插入排序(这个就是查找时为这般查找,以前博客中有)
3.希尔排序
void ShellInsert(SqList &L,int dk)
{//对顺序表L进行一趟增量为dk的Shell排序,dk为步长因子
for(i=dk+1;i<=L.length; ++ i)//开始将r[i] 插入有序增量子表
if(r[i].key < r[i-dk].key)
{
r[0]=r[i];//暂存在r[0]
for(j=i-dk; j>0 &&(r[0].key<r[j].key); j=j-dk)
r[j+dk]=r[j];//关键字较大的记录在子表中后移
r[j+dk]=r[0];//在本趟结束时将r[i]插入到正确位置
}
}
4.冒泡排序(这个也有,哈哈,我懒)
5.快速排序
int Partition ( SqList &L,int low, int high )
{ L.r[0] = L.r[low]; //枢轴暂存到0号单元
while ( low < high )
{ while ( low < high && L.r[high].key >= L.r[0].key ) --high;
L.r[low] = L.r[high];
while ( low < high && L.r[low].key <= pivotkey ) ++low;
L.r[high] = L.r[low];
}
L.r[low]=L.r[0];
return low;
}
6.简单选择排序
7.树形选择排序
8.堆排序
9.归并排序
10.基数排序
后记:
很多这里没有展示出来,那是因为我的博客专栏里面都有,这里只是立一个大纲,如果有误,评论指出,谢谢。