2015-02-23 93 views
0

我正在处理一个排序项目和我的快速排序工作与300kb的数据很好,但是当我尝试排序1mb的数据时,程序给我在Xcode和seg中的坏线程访问故障:11在终端。Bad线程访问/ seg故障QuickSort

void SortingCompetition::quicksort(int low, int high) 
{ 
if (high!=low&& high>low) 
{ 

long one=hash[low]; 
long two=hash[high]; 
long three = hash[high/2]; 
    if((one<=two&&one>=three)||(one<=three&&one>=two)) 
    { 
     swap(hash[low], hash[high]); 
     swap(copyOfWords[low], copyOfWords[high]); 
    } 
    else if((three<=one&&three>=two)||(three<=two&&three>=one)) 
    { 

     swap(hash[high/2], hash[high]); 
     swap(copyOfWords[high/2], copyOfWords[high]); 
    } 
    else 
    { 

    } 
    int i=low; 
    int j=high-1; 
    while(i!=j&&i<j) 
    { 
     while(hash[i]<=hash[high]&&i<j) 
     { 
      i++; 
     } 
     while(hash[j]>=hash[high]&&i<j) 
     { 
      j--; 
     } 
     if(i==j||i>j) 
     { 
     } 
     else 
     { 
      swap(hash[i],hash[j]); 
      swap(copyOfWords[i],copyOfWords[j]); 
         } 
     } 
    swap(hash[i],hash[high]); 
    swap(copyOfWords[i], copyOfWords[high]); 
    quicksort(low, j-1); 
    quicksort(j+1, high); 
} 

散列和copyofwords都动态分配到相同的大小。我不知道如何解决这个问题。在此先感谢

回答

0

它是一种递归方法。所以你用这些调用溢出堆栈。

无论何时您调用一个函数(包括递归),返回地址和参数通常会被压入调用堆栈。堆栈是有限的,所以如果递归太深,你最终会用完堆栈空间。

+0

有没有办法阻止? – Anonymous 2015-02-23 19:35:16

+0

您可以将其翻译为迭代算法。每个递归算法都可以用交互模式表示。 – amchacon 2015-02-23 19:39:50

+0

谢谢,我的编译器有问题,我研究迭代,但没有时间来实现它。 – Anonymous 2015-02-26 00:06:37