i在运算过程中变了没有啊?还是始终指向A[0]?
int FindPivot(int i,int j)
{
int firstkey;
int k;
firstkey=A[i];
for(k=i+1;k<=j;k++)
if(A[k]>firstkey)
return k;
else if (A[k]<firstkey)
return i;
return 0;
}/*得到前几个中较大的作为基准元素*/
void Swap(int a,int b)
{
int t;
t=a;
a=b;
b=t;
}/*后面调用的时候用到*/
int partition(int i,int j,int pivot)
{
int l,r;
l=i;
r=j;
do
{
Swap(A[l],A[r]);
while(A[l]<pivot)
l=l+1;
while(A[r]>=pivot)
r=r-1;
}while(l<=r);
return l;
}/*一次划分的算法*/
void QuickSort(int i,int j)
{
int pivot;
int pivotindex;
int k;
pivotindex=FindPivot(i,j);
if(pivotindex!=0)
{
pivot=A[pivotindex];
k=partition(i,j,pivot);
QuickSort(i,k-1);
QuickSort(k,j);
}
}/*快速排序算法的主函数*/
数据结构的书给了上面三个函数,我把他们整合在一起,求问下,那个i运算的过程变了没?还是始终指向第一个A[0]?
我给赋了值试着算下比如
int A[10]={3,1,4,1,5,9,2,6,5,3};把A[10]快速排序,不知道i变了没有,感觉好像没变,于是就是下面的程序试着运转,运转不出来
#include <stdio.h>
#include <stdlib.h>
int A[10]={3,1,4,1,5,9,2,6,5,3};
int i=0;
int j=9;
int partition(int i,int j,int pivot);
int FindPivot(int i,int j);
void QuickSort(int i,int j)
由于字数限制就只把函数名写了
说了这么多,其实就像问下
关于廖的数据结构那本书里面快速排序算法,那个"i"在程序运作过程中变了没?还是A[i]始终指的是A[0]?
对对对!!!!就是起点,还有j指的是快排的终点,按理说也应该变,但是我从上面几个算法里面,没看出来哪里说i变了,书上是给了几个部分,我把他们合起来了,可能不完善。就想问下,上面那些算法哪里能看出来i变了?
追答QuickSort(i,k-1);
QuickSort(k,j);
这边的递归调用啊 把现在的区间分成了两个区间 k-1变成了j,k变成了新的i
好像对!!那你试试运转下面这个,我在codeblocks上运转的,0 warning 0 error,就是结果没排,帮看下错了吗?图片拼在一起,有重复一点点
http://zhidao.baidu.com/question/647574304538364405.html文字版的在这里,这里打不下了