首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-09-25 
我的快速排序到底是哪里出了问题,我都按执行过程检查了很多次。//Quick_sort 原理是对冒泡排序的一种改进,

我的快速排序到底是哪里出了问题,我都按执行过程检查了很多次。
//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;
}


修改的

热点排行