一个无法再简单的快排程序,为什么在对一个大的整数数组进行排序的时候老是段错,小的却不会。50分!
以下是快排程序,我放了两个数组进去排序,第二个是根据第一个变而变,实际是记录第一个数组排序的位置变化,所以实际是对第一个整数数组进行排序: 
 void 
 swapIntArray4Sort(const   int   pos1,   const   int   pos2,   UINT32   *corpWeight,   UINT32   *recCorpPos) 
 { 
 	assert(0    <=   pos1   &&   0    <=   pos2);   
 	swapInteger(   (int   *)&corpWeight[pos1],   (int   *)&corpWeight[pos2]); 
 	swapInteger(   (int   *)&recCorpPos[pos1],   (int   *)&recCorpPos[pos2]); 
 }   
 void 
 quickSort4CorpWeight(int   left,   int   right,   UINT32   *corpWeight,   UINT32   *recCorpPos) 
 {	                    	 
 	if   (left   > =   right)   /*   do   nothing   if   array   contains   */ 
          	{ 
 		   return;                        /*   fewer   than   two   elements   */ 
       	}  	 
 	/*   move   partition   elem   */ 
 	swapIntArray4Sort(left,   (left   +   right)   /   2,   corpWeight,   recCorpPos);         
 	UINT32   last   =   0; 
 	last   =   left;  	 
 	UINT32   i   =   0;   
          	for   (i   =   left   +   1;   i    <=   right;   i++)   /*   partition   */ 
          		{ 
 		   if   (corpWeight[i]    <   corpWeight[left]) 
 			{ 
 			swapIntArray4Sort(++last,   i,   corpWeight,   recCorpPos); 
 			} 
          		}                     
 	swapIntArray4Sort(left,   last,   corpWeight,   recCorpPos);	/*   restore   partition   elem   */  		 
 	quickSort4CorpWeight(left,   last   -   1,   corpWeight,   recCorpPos); 
 	quickSort4CorpWeight(last   +   1,   right,   corpWeight,   recCorpPos); 
 } 
------解决方案--------------------问题在于数组太大时,递归耗尽了栈空间,VC默认栈1M,看来需要更改这个默认设置。 
 以下来自 
 http://www.vckbase.com/bbs/prime/viewprime.asp?id=163 
 问题提出]   
 VC++下怎样设置栈的大小   
 [问题解答]   
 方法一:STACKSIZE   定义.def文件   
     语法:STACKSIZE reserve[,commit] 
     reserve:栈的大小;commit:可选项,与操作系统有关,在NT上只一次分配物理内存的大小   
 方法二:设定/STACK    
     打开工程,依次操作菜单如下:Project-> Setting-> Link,在Category 中选中Output,然后 
 在Reserve中设定堆栈的最大值和commit。   
 注意:reserve默认值为1MB,最小值为4Byte;commit是保留在虚拟内存的页文件里面,它设置的较 
 大会使栈开辟较大的值,可能增加内存的开销和启动时间  
------解决方案--------------------用--stack选项,自己man一下就知道了。   
 LD(1)			     GNU Development Tools			 LD(1)   
 NAME 
        ld - Using LD, the GNU linker   
 SYNOPSIS 
        ld [options] objfile ...   
 DESCRIPTION 
 ... 
        --stack reserve 
        --stack reserve,commit 
 	   Specify the amount of memory to reserve (and optionally commit)  to 
 	   be used as stack for this program.  The default is 2Mb reserved, 4K 
 	   committed.  [This option is specific to the i386 PE	targeted  port 
 	   of the linker] 
------解决方案--------------------错误提示是什么啊?堆栈溢出和内存越界的提示是不同的啊.