1.快速排序
- 传入划分值a,通过与a比较大小 ,将数据分为大于a和小于a的两部分。返回a对应的数组下标p
- 以p作为界定,将数据分为两部分,再次进行快速排序
- 递归运行以上程序
void Ksort(int a[ ],int low,int high)
{
p=part(a,low,high)
Ksort(a,low,p-1)
Ksort(a,p+1,high)
}
2.折半查找
1.将无序的数组有序的进行排列
2.取中位数比较
- 相等 返回下标
- 比中位数大 提高取中位数的下界 再次折半查找
- 比中位数小 降低取中位数的上界 再次折半查找
Midsort(int a[],int low,int high)
{
mid=(high+low)/2
if(a[mid] == x )
return mid
if(a[mid] > x)
return Midsort(a,low,mid-1)
if(a[mid] < x)
return MIdsort(a,mid+1,high)
}
3.动态规划
前面子序列之和
- 大于0,保留b=b+a[i]
- 小于等于0,则丢弃,令b=a[i]
- 记录每一轮的最大长度
b=0
sum=0
for(int i=0;i<n;i++)
{
if (b>0)
b+=a[i];
else
b=a[i];
if(b>sum)
sum=b;
}
4.哈夫曼编号
1.权值排序
2.绘图
3.编码
4.演示合并过程
5.计算权值
5.棋盘覆盖
-
识别棋盘是否正常
- 否 继续划分
- 是 进行t填充使棋盘不正常
-
不断递归直到全部填充满