如何解决快速排序实现,找不到错误
| 我想用一些不同的数据透视策略来实现这种快速排序算法,但是其中存在一些逻辑错误。你能帮我找到吗?#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,j);
}
if (i < right)
{
quickSort(arr,right);
}
}
解决方法
无论您当时恰好要对数组的哪一部分进行排序,您的枢轴值始终为be1ѭ的值,即
arr[2]
。将left
和right
的值传递给partition
,以便知道当前对quickSort
的调用要考虑的值。
另外,您初次调用quickSort
时传递的left
和right
的值分别为20和21,这肯定不是您想要的。您有一个长度为100的数组,并且已经初始化了前21个元素,因此您可能希望为这些参数传递0和21。
但是,如果要使用不同的数据透视策略测试quicksort,可能应该做的第一件事就是使它首先使用典型的数据透视策略(如教科书中演示的方法)工作。从一个可行的实现开始,然后才应该开始尝试各种变体。您应该能够在教科书或课堂笔记中找到有效的实现方式。
,我没有找到任何地方可以比较数组中的值。
我想你应该检查一下这个地方:
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
可能应该是:
if (arr[i] < arr[j]) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。