- 论坛徽章:
- 0
|
看了一下代码,好巧妙~
确实是快速排序算法,而且是非递归实现,主要思想是.......懒得写了
我仿照写了一个验证思路的:
- #include <iostream>
- #include <math.h>
- using namespace std;
- void qsort(int array[], size_t size)
- {
- // 3^0, 3^1, 3^2, 3^3, 3^4, 3^5, 3^6, 3^7, 3^8, 3^9; for convenience, counter[0] not used.
- list<int> counter[10];
- int index = 0;
- while( index < size )
- {
- int v = array[index];
- int i = 1;
- list<int> temp; temp.push_back(v);
- counter[i].merge(temp);
- if( counter[i].size() % 3 == 0 && counter[i].size() / 3 == i )
- {
- // need to up to the next level
- int j = i + 1;
- do {
- counter[j].merge(counter[j-1]);
- } while ( counter[j].size() > pow(3,j++) );
- }
- ++index;
- }
- for( int k = 1; k < 10; ++k )
- {
- counter[k].merge(counter[k-1]);
- }
- copy(counter[k-1].begin(), counter[k-1].end(), ostream_iterator<int>(cout, " "));
- }
- int main(int argc, char* argv[])
- {
- int array[] = { 1, 5, 8, 3, 2, 9, 4, 41, 32, 0, 7, 6, 37};
- qsort(array, sizeof(array)/sizeof(array[0]));
-
- return 0;
- }
复制代码
[ 本帖最后由 dzbjet 于 2006-8-13 13:53 编辑 ] |
|