小弟我的快速排序到底是哪里出了有关问题,小弟我都按执行过程检查了很多次

我的快速排序到底是哪里出了问题,我都按执行过程检查了很多次。
//Quick_sort 原理是对冒泡排序的一种改进,使用了分治的思想,所以采用了递归。
#include<stdio.h>
#define N 8
int partition(int a[],int left,int right);
void exchange(int *m,int *n);
void Quick_sort(int a[],int left,int right);

int main()
{

int a[N+1];
int i;

for(i=1;i<=N;i++)
  scanf("%d",&a[i]);
Quick_sort(a,1,N);

for(i=1;i<=N;i++)
  printf("%3d",a[i]);
printf("\n");
return 0;
}

void Quick_sort(int a[],int left,int right)
{
//需要两个变量指向前后,将数组元素划分成两部分,前面的元素都比key小,后面的元素都比前面的大
if(left<right)
{
int p=partition(a,left, right);
    Quick_sort(a,left,p-1);
    Quick_sort(a,p+1,right);
}
}


int partition(int a[],int left,int right)
{
int key=a[left];
int i=left;
int j=right;
while(i<j)
{
 
while(a[j]>=key && i<j );
   j--;
       
while(a[i]<=key && i<j);
   i++;
exchange(&a[i],&a[j]);
// int temp=a[i];
// a[i]=a[j];
// a[j]=temp;
}

exchange(&a[j],&key);
// {
// int temp=a[i];
// a[i]=key;
// key=temp;
// }
return j;
}

void exchange(int *m,int *n)
{
int temp=*m;
    *m=*n;
*n=temp;
}

------解决方案--------------------
你的函数的括号都不匹配,还有两个while语句后面多了个分号,死循环了都。
------解决方案--------------------
#include<iostream>
using namespace std;
#define N 8
int partition(int a[],int left,int right);
void exchange(int *m,int *n);
void Quick_sort(int a[],int left,int right);

int main()
{

int a[N+1];
int i;

for(i=1;i<=N;i++)
  cin>>a[i];
Quick_sort(a,1,N);