. . .
left,const int mid,const int right);//两路归并算法 };
template template .......... . . . template template void sortlist for(int i=0;i template void sortlist .......... . . . { int i=low,j=high; type temp=arr[low];//取区间第一个位置为基准位置 if(i template void sortlist {//向下调整使从start开始到currentsize-1为止的子表成为最大堆 int i=start,j=2*i+1;//j为i的左孩子 int tablesize=currentsize; type temp=arr[i]; while(j<=currentsize-1) { if(j template void sortlist .......... . . . for(int i=(currentsize-2)/2;i>=0;i--) filterdown(i); //初始建堆 for(int i=currentsize-1;i>=1;i--) { swap(arr[0],arr[i]);//堆顶元素和最后一个元素交换 currentsize--; filterdown(0);//重建最大堆 cout<<\第\<<++num<<\趟排序结果为:\; for(int t=0;t template sortlist //i是前一段的当前元素位置,j是后一段的当前元素位置,k是辅助数组的当前位置 while(i<=mid&&j<=right) if(sourcetable.arr[i]<=sourcetable.arr[j]) {mergedtable.arr[k]=sourcetable.arr[i];i++;k++;} else{mergedtable.arr[k]=sourcetable.arr[j];j++;k++;} if(i<=mid) for(int p=k,q=i;q<=mid;p++,q++) mergedtable.arr[p]=sourcetable.arr[q];//把前一段复制到mergedtable else for(int p=k,q=j;q<=right;p++,q++) mergedtable.arr[p]=sourcetable.arr[q];//把后一段复制到mergedtable } template sortlist .......... . . . i+=2*len; } if(i+len<=currentsize-1)//若只有最后两个子序列 merge(sourcetable,mergedtable,i,i+len-1,currentsize-1); else//若只有最后一个子序列 for(int j=i;j<=currentsize-1;j++) mergedtable.arr[j]=sourcetable.arr[j]; if(len<=currentsize-1) {if(num template void sortlist {//按数据元素关键字非递减的顺序对排序表table中数据元素进行递归排序 sortlist int main()//主函数 { cout<<\ ***********************************************************************\< cout<<\< < \=========\ ..........
相关推荐: