排序选择算法

排序

冒泡

依次比较相邻两个数,把最大的数冒泡到最后。

插入排序

类比摸扑克牌,稳定

void InsertionSort( ElementType A[], int N )
{ /* 插入排序 */
     int P, i;
     ElementType Tmp;
     
     for ( P=1; P<N; P++ ) {
         Tmp = A[P]; /* 取出未排序序列中的第一个元素*/
         for ( i=P; i>0 && A[i-1]>Tmp; i-- )
             A[i] = A[i-1]; /*依次与已排序序列中元素比较并右移*/
         A[i] = Tmp; /* 放进合适的位置 */
     }
}

希尔排序

插入排序+增量(依次递减)

对每个增量N考虑间隔为N的子序列,分别排序

选择排序

每次遍历序列,找最小元,swap到前面。

堆排序

也可以使用建立最大堆方法,建堆后把最大的顶点和最后的数据交换,然后对剩下的数据再次建堆。

归并排序

 

快速排序

分治

表排序

移动元素的代价比较大,我们选择不移动元素而移动指向他们的指针,这里的指针并不一定指c语言里面的指针,也包括下标

桶排序

空间换时间

基数排序

  • 基数排序:根据键值的每位数字来分配桶;

 

查找

散列查找

散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。又称为哈希(Hash)函数。

构造:

直接定址法

除留余数法

数字分析法、折叠法、平方取中法

处理冲突:

开放定址法:线性探测、平方探测、双散列

链接法:将所有关键字为同义词的记录存储在一个单链表中

公共溢出区法:

ASL

评价

查找平均长度取决于:

  • 散列函数是否均匀
  • 处理冲突的方法
  • 散列表的装填因子 装填因子=填入表中的记录个数/散列表长度。(表示散列表的装满的程度) 当填入表中的记录越多,装填因子越大,产生冲突可能性越大。

牺牲空间换时间

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值