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 - 1; while (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
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论