我的快速排序到底是哪里出了问题,我都按执行过程检查了很多次。
//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);
for(i=1;i<=N;i++)
printf("%3d",a[i]);
printf("\n");
system("pause");
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=1;
int j=right;
while(i<j)
{
while(a[j]>=key && left<j
[解决办法]
a[j]==a[j-1] )
j--;
while(a[i]<key && i<j
[解决办法]
a[i]==a[i+1])
i++;
if(a[j]!=a[left])
exchange(&a[j],&a[i]);
if(a[j]==key)
break;
//int temp=a[i];
//a[i]=a[j];
//a[j]=temp;
}
//exchange(&a[i],&key);
//{
// int temp=a[i];
// a[i]=key;
// key=temp;
//}
return i;
}
void exchange(int *m,int *n)
{
int temp=*m;
*m=*n;
*n=temp;
}
修改的