c语言关于快速排序与归并排序的问题

在排序10000+个数字时,有时候能成功,但是有时候会卡死,随着数字个数增加卡死的几率增大

代码如下N为数字个数,flag用于记录执行次数

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#define N 80000
int flag=0;
void MergeSort(unsigned A[],int a,int b,int c);
void QuickSort(unsigned A[],int start,int end)
{
if(end<=start)return;
int high=end,low=start;
while(high!=low)
{
flag++;
//记录执行次数
if(high>low)
{
if(A[high]>A[low])
high--;
//A[high]大于A[low]时向前寻找
else if(A[high]<A[low])
{
int t=A[high];
A[high]=A[low];
A[low]=t;
//交换值
t=high;
high=low;
low=t;
high++;
//位置交换,向后寻找
}
}
else if(high<low)
{
if(A[high]<A[low])
high++;
//A[high]小于A[low]时向后寻找
else if(A[high]>A[low])
{
int t=A[high];
A[high]=A[low];
A[low]=t;
//交换值
t=high;
high=low;
low=t;
high--;
//位置交换,向前寻找
}
}
}
QuickSort(A,start,high-1);
QuickSort(A,high+1,end);
}
void top_MergeSort(unsigned A[],int start,int end)
{
if(start>=end)return;
int mid=(start+end)/2;
top_MergeSort(A,start,mid);
top_MergeSort(A,mid+1,end);
MergeSort(A,start,mid,end);
}
void MergeSort(unsigned A[],int start,int mid,int end)
{
if(end-start<=0)return;
int B[end-start+1];
int i=start,j=mid+1,k=0;
//将start->mid和(mid+1)->end划分开
/*
排序
/
while(i<=mid&&j<=end)
{
flag++;
if(A[i]<A[j])
{
B[k]=A[i];
k++;
i++;
}
if(A[i]>A[j])
{
B[k]=A[j];
k++;
j++;
}
}
if(i>mid)
{
while(j<=end)
{
flag++;
B[k]=A[j];
k++;
j++;
}
}
else if(j>end)
{
while(i<=mid)
{
flag++;
B[k]=A[i];
k++;
i++;
}
}
/*
放回
*/
for(k=0;start<=end;start++)
{
flag++;
A[start]=B[k];
k++;
}
}
void bottom_MergeSort(unsigned A[],int start,int end)
{
int k=1;
int len=end-start+1;
while(k<len)
{
int tmp=start;
for(;tmp+2*k-1<=end;tmp+=2*k)
MergeSort(A,tmp,tmp+k-1,tmp+2*k-1);
if(tmp-1==end);
else if(end-tmp+1<=k)
MergeSort(A,tmp-2*k,tmp-1,end);
else if(end-tmp+1>k)
MergeSort(A,tmp,tmp+k-1,end);
k
=2;
}
}
int main()
{
unsigned A[N];
srand((unsigned)time(NULL));
for(int i=0;i<N;i++)
{
A[i]=rand();
}
QuickSort(A,0,N-1);
printf("%d\n",flag);
return 0;
}

可以参考这个快排 归并。
链接: https://pan.baidu.com/s/1cUxV1vJTdF4TZpl7NtOB9A 提取码: hw2t 复制这段内容后打开百度网盘手机App,操作更方便哦
--来自百度网盘超级会员v1的分享

请问程序又什么问题呢?