第一,你main里面,把一个没有分配内容的指针L拿来直接用就错了。
第二,quicksort是分而治之,是逐层分。每次partition之后,分成两部分,一边比哨兵小,一边比哨兵大。应该对于这两部分分别继续quicksort。递归的做。你只partition了一次,所以,这一次能不能正好排对就靠运气了。
我给你改了一下,你看看对不对。
#include
#define MAXSIZE 1000
typedef struct
{
int r[MAXSIZE+1];
int length;
}SqList;
void swap(SqList *L,int i,int j)
{
int temp=L->r[i];
L->r[i]=L->r[j];
L->r[j]=temp;
}
int Partition(SqList *L,int low,int high)
{
int pivotkey;
pivotkey=L->r[low];
while(low{
while(lowr[high]>=pivotkey)
high--;
swap(L,low,high);
while(lowr[low]<=pivotkey)
low++;
swap(L,low,high);
}
return low;
}
void QuickSort(SqList *L, int low, int high){
int key = Partition(L, low, high);
if(key > low+1)
QuickSort(L, low, key-1);
if(key < high-1)
QuickSort(L, key+1, high);
}
int main()
{
SqList L;
int i,j;
int low=0,high;
printf("请输入排序个数:");
scanf("%d",&i);
high=i-1;
printf("请输入元素:");
for(j=0;j {
scanf("%d",&L.r[j]);
}
QuickSort(&L,low,high);
for(j=0;j {
printf("%d ",L.r[j]);
}
}
SqList *L;//这里只是一个指针,没有保存元素的内存空间,只要运行都会出错的。
#include
#define MAXSIZE 1000
typedef struct{
int r[MAXSIZE+1];
int length;
}SqList;
void swap(SqList *L,int i,int j){
int temp=L->r[i];
L->r[i]=L->r[j];
L->r[j]=temp;
}
void Partition(SqList *L,int low,int high){
int pivotkey;
int l=low,h=high;
if(low
while(low
high--;
swap(L,low,high);
while(low
low++;
swap(L,low,high);
}
Partition(L,l,low-1);
Partition(L,low+1,h);
}
}
int main(){
SqList L;
int i,j;
int low=0,high;
printf("请输入排序个数:");
scanf("%d",&i);
high=i-1;
printf("请输入元素:");
for(j=0;j scanf("%d",&L.r[j]);
}
Partition(&L,low,high);
for(j=0;j printf("%d ",L.r[j]);
}
}