原创 归并分类

2013-11-9 22:17 570 7 1

void InsertionSort(elemType a[],int n) {
//将A(l:n)中的元素按非递减分类。n≥1
int i;
for(j=2;n;++j) { //A(l:j-l)已分类。
a[0]=a[j];i = j - 1while (a[0]<a)) { //0≤i<j,a[0]作为哨兵元素,这是一种编程技术。
a[i+l] = a;i = i - 1;
};//while
a[i+1] = a[0];
};//for
}// InsertionSort

while循环中的语句可能执行0~j次(j=2,3,…,n),因此,这函数过程的最坏情况限界是:
Σj=(n(n+1)/2)-l=Θ(n2)
2≤j≤n
如果输入数据本来就是按非递减排列的,则根本不会进入while的循环体,这就是最好情况,计算时间是Ω(n)。

归并分类

void MergeSort(int low,int high) {
//A(low:high)是一个全局数组,它有high-low+l≥0个待分类元素。
int mid;
if(low<high)
{ mid = (low + high) / 2//求这个集合的分割点
MergeSort(low,mid); //将一个子集合分类
MergeSort(mid+1,high); //将另一个子集合分类
Merge(low,mid,high);} //归并两个已分类的子集合
}// MergeSort

作者: 李肖遥, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3912462.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条