寻求最优最快的算法,快速找出某一数组中符合条件的子集(如最大的100...
发布网友
发布时间:2022-04-30 14:26
我来回答
共2个回答
热心网友
时间:2022-04-18 22:11
我记得这个再算法分析里面我学过,多种排序方法里面,时空效率最高的应该是堆排序
堆排序的最坏时间复杂度为O(nlgn)。堆排序的平均性能较接近于最坏性能。
由于建初始堆所需的比较次数较多,所以堆排序不适宜于记录数较少的文件。
堆排序是就地排序,辅助空间为O(1),
堆排序的算法:
void HeapSort(SeqIAst R)
{ //对R[1..n]进行堆排序,不妨用R[0]做暂存单元
int i;
BuildHeap(R); //将R[1-n]建成初始堆
for(i=n;i>1;i--){ //对当前无序区R[1..i]进行堆排序,共做n-1趟。
R[0]=R[1];R[1]=R[i];R[i]=R[0]; //将堆顶和堆中最后一个记录交换
Heapify(R,1,i-1); //将R[1..i-1]重新调整为堆,仅有R[1]可能违反堆性质
} //endfor
} //HeapSort
热心网友
时间:2022-04-18 23:29
用冒泡排序法,不用全部排完,只排前1000个