【发布时间】:2011-04-13 13:55:44
【问题描述】:
我想用一些不同的枢轴策略来实现这个快速排序算法,但其中存在一些逻辑错误。你能帮我找到吗?
#include <iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
int arr[100],i,pivot,left,right,sum=0,a,n=10;
int partition();
void quickSort(int* ,int ,int );
void main()
{
clrscr();
int i,n=20;
for(i=0;i<=n;i++)
{
arr[i]=rand()%100;
}
for(i=0;i<=n;i++)
{
cout<<"\t"<<arr[i];
}
quickSort(arr,n,i);
for(i=1;i<n;i++)
{
cout<<"\n"<<arr[i];
}
getch();
}
int partition()
{
// int i;
// int sum=0;
// int pivot;
// stable_sort(arr,arr+3);
for(i=0;i<5;i++)
{
cout<<"\nsorted k elements\t"<<arr[i];
// sum=sum+arr[i];
}
// cout<<sum;
//cout<<"median is "<<sum/3;
pivot=arr[(i)/2];
cout<<"pivotis value at position "<<pivot ;
return pivot;
}
void quickSort(int arr[],int left,int right)
{
partition();
right=n,left=0;
int i = right, j =left;
int tmp;
int p=pivot;
cout<<" m array of p"<<p;
while (i <= j) {
while (arr[i] < p)
i++;
while (arr[j] > p)
j--;
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
}
if (left < j)
{
quickSort(arr, left, j);
}
if (i < right)
{
quickSort(arr, i, right);
}
}
【问题讨论】:
-
你怎么知道你有一个逻辑错误?你能提供一个小样本输入数据集的结果吗?
-
标题 'NO IDEA WATS THE PROBLEM' 对你没有帮助,所以我,错误 - 完善了它。你试过调试这个吗?找到错误了吗?
-
我没有在分区中声明
-
您已请求帮助查找“错误”。我看这段代码的次数越多,我就越确信错误是全部。不要尝试修复此代码。废弃它并使用您知道有效的代码重新开始。一旦您自己确认它有效,然后开始试验。进行更改,看看它是否仍然有效。如果没有,请撤消该更改并尝试其他方法。
标签: c++ c algorithm sorting quicksort