小结一下:
对这个问题,到目前,我们得到了两段比较好的代码:堆选择与快速选择。
堆选择,是我根据维基百科/堆排序/C++代码,改写得。
快速选择,为ExcelHome的知名网友香川群子所写。她并指出,该代码去掉提前退出的条件,即为快速排序。即:
void SortQuick(int data[], int Low, int High) { int low= Low, high= High; for(int key= data[(Low+High)/2]; low< high; ) { for( ; low< High && key> data[low]; ) low++; for( ; Low< high && key< data[high]; ) high--; if(low<= high) swap(data[low], data[high]), add+= low==high, low++, high--; } if(low< High) SortQuick(data, low, High); if(Low< high) SortQuick(data, Low, high); }
应该加个对外的函数接口:
void QuickSort(int data[], int m) { SortQuick(data, 0, m-1); }
快速选择,本质是将数据分成两组。因此,这里称它为分组方式。简称分组。
那么,这两个好的代码之间来比较。会是怎么样一个结果呢?
我做了一下。当选择为百选一,两者速度相当。堆略快。千选一,堆快。十选一,分组快。
前面这些代码,尤其是这两段好代码。为我们处理更大数据量。打下了一个基础。
这个总结,也算为之后的工作,作一个广告。