堆栈溢出
#include <stdio.h>#include "算法排序.cpp"
void main ()
{
SqList L;
InitList_L (L);
int n,i;
printf ("输入待排序记录的个数n: ");
scanf ("%d",&n);
for (i=1;i<=n;i++)
{
printf ("输入第%d个记录的关键字以及其他信息: ",i);
scanf ("%d",&L.r[i].key);
scanf ("%d",&L.r[i].otherinfo);
L.length++;
}
//SelectSort (L);
//InsertSort (L);
//BubbleSort (L);
QuickSort (L);
for (i=1;i<=n;i++)
{
printf ("%d %d",L.r[i].key,L.r[i].otherinfo);
printf ("\n");
}
//DestroyList_L (L);
}
1-2.cpp如下所示
#include <iostream>
#include <stdio.h>
#define MAXSIZE 10
typedef int KEYTYPE;
typedef int INFOTYPE;
typedef struct
{
KEYTYPE key;
INFOTYPE otherinfo;
}RcdType;
typedef struct
{
RcdType *r;
//RcdType r[MAXSIZE+1];
int length;
}SqList;
void InitList_L (SqList &L)
{
L.r=new RcdType [MAXSIZE+1];
L.length=0;
}
void DestroyList_L (SqList &L)
{
delete [] L.r;
L.length=0;
}
/********************************************/
/****** 选择排序 *************/
/********************************************/
void SelectSort (SqList &L)
{
RcdType w;
int i,j,k;
for (i=1;i<L.length;i++)
{
j=i;
for (k=i+1;k<=L.length;k++)
if (L.r[k].key<L.r[j].key)
j=k;
if (j!=i)
{
w=L.r[i];
L.r[i]=L.r[j];
L.r[j]=w;
}
}
}
/********************************************/
/****** 插入排序 *************/
/********************************************/
void InsertSort (SqList &L)
{
int i,j;
for (i=2;i<=L.length;i++)
{
if (L.r[i].key<L.r[i-1].key)
{
L.r[0]=L.r[i];
for (j=i-1;L.r[0].key<L.r[j].key;j--)
L.r[j+1]=L.r[j];
L.r[j+1]=L.r[0];
}
}
}
/********************************************/
/****** 起泡排序 *************/
/********************************************/
void BubbleSort (SqList &L)
{
RcdType w;
int i,j;
i=L.length;
int lastExchangeIndex;
while (i>1)
{
lastExchangeIndex=1;
for (j=1;j<i;j++)
{
if (L.r[j].key>L.r[j+1].key)
{
w=L.r[j];
L.r[j]=L.r[j+1];
L.r[j+1]=w;
}
lastExchangeIndex=j;
}
i=lastExchangeIndex;
}
}
/********************************************/
/****** 快速排序 *************/
/********************************************/
int Partition (RcdType R[],int low,int high)
{
R[0]=R[low];
while (low<high)
{
while (low<high && R[high].key<R[0].key)
high--;
R[low++]=R[high];
while (low<high && R[low].key>R[0].key)
low++;
R[high--]=R[low];
}
R[low]=R[0];
return low;
}
void QSort (RcdType R[],int s,int t)
{
int pivotloc;
if (s<t)
{
pivotloc=Partition(R,s,t);
QSort (R,s,pivotloc-1);
QSort (R,pivotloc+1,t);
}
}
void QuickSort (SqList &L)
{
QSort (L.r,1,L.length);
}
在VC6.0下运行没有得到预期结果,调试时,出现stack overflow 还会出现Accession Violation
这是什么问题,怎么解决啊?