总结一下查找与排序的程序算法

前言:

    总结一波!!!

一、查找

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.基数排序

后记:

    很多这里没有展示出来,那是因为我的博客专栏里面都有,这里只是立一个大纲,如果有误,评论指出,谢谢。

发布了93 篇原创文章 · 获赞 193 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43919400/article/details/103686656