0x00191879 處的第一機會例外(在 QuickSort.exe 中):
0xC00000FD: Stack overflow (引數: 0x00000001, 0x00282F9C)。
如有適用于此例外的處理程式,該程式便可安全地繼續運行。
//快速排序演算法,不知道什么原因,我的代碼只能對沒有排好序的陣列排序
// 而對于已經排好序的陣列,int a[MAX_SIZE],如果定義比MAX_SIZE較小的時候,呼叫Quick_Sort函式是沒有問題的,但是如果定義MAX_SIZE比較大,那么程式就會出現上述錯誤

#include <iostream>
#include <iomanip>
using namespace std;
#define MAX_SIZE 10000
template<typename T>
void Quick_Sort(T *a, int left, int right);
int main()
{
int array[MAX_SIZE];
for(int i=0; i<MAX_SIZE; i++)
array[i]= i;
Quick_Sort( array, 0, MAX_SIZE-1);
system("pause");
return 0;
}
template<typename T>
void Quick_Sort(T *a, int left, int right)
{
int i=left, j=right;
T base= *(a+left);
if(right<=left)
return ;
while( i< j)
{
while(i< j && *(a+j )>= base )
j--;
if(i<j)
*(a+i)= *(a+j);
while(i< j && *(a+i)<=base )
i++;
if(i<j)
*(a+j)= *(a+i);
}
if(i==j)
*(a+i)= base;
Quick_Sort( a, left, i-1 );
Quick_Sort( a, i+1, right);
}
uj5u.com熱心網友回復:
Stack overflow,往往是由于死遞回造成的uj5u.com熱心網友回復:
遞回呼叫,使用堆疊實作的,而堆疊的大小一般由編譯系統指定,不是非常大,所以就會Stack overflow因此,要應付大資料,不要用遞回
uj5u.com熱心網友回復:
可是我呼叫下面這個函式卻不會出現這個情況,請問能幫我解釋下么void qsort(int v[], int left, int right)
{
int i, last;
void swap(int v[], int i, int j);
if (left >= right)
return;
last = left;
for (i = left + 1; i <= right; i++)
if (v[i] < v[left])
swap(v, ++last, i);
swap(v, left, last); /* restore partition elem */
qsort(v, left, last-1);
qsort(v, last+1, right);
}
void swap(int v[], int i, int j)
{
int temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
uj5u.com熱心網友回復:
這完全是一樣的演算法和遞回次數,一個有stack overflow,另一個卻不會出現這種情況uj5u.com熱心網友回復:
排版都不會?uj5u.com熱心網友回復:
什么排版??轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/123296.html
標籤:基礎類
下一篇:如何用c++寫一個圖書館登錄系統
