关于快速排序问题
假如规定进行快速排序算法的函数只能传递数组这一个参数,该怎样将递归进行下去呢
我想到的有两种方法
第一种是,在进行完一次快速排序之后,重新定义两个数组分别存储被分割的两部分,作为传递参数继续进行递归过程
第二种是,进行完一次快速排序之后,对数组进行改造,在需要分隔的地方插入事先规定好的特殊数字作为分隔
以上两种方法总感觉不合适,希望各位大牛能指导一二
------解决思路----------------------
其实也可以传递指针,而非数组
------解决思路----------------------
#include
using namespace std ;
#define P(a ,b) ((void*) ((int) a + (b)))
void r_qsort (void *a ,int na ,int sa ,int (__cdecl *cmp) (const void *pa ,const void *pb))
{
int i ,j ;
void *temp = malloc (sa) ;
if (na <= 0)
return ;
i = 0 ;
j = na - 1 ;
memcpy (temp ,P (a ,i * sa) ,sa) ;
while (i
while (i
j-- ;
if (i
memcpy (P (a ,i * sa) ,P (a ,j *sa) ,sa) ;
i++ ;
}
while (i
i++ ;
if (i
memcpy (P (a ,j * sa) ,P (a ,i *sa) ,sa) ;
j-- ;
}
}
memcpy (P (a ,i * sa) ,temp ,sa) ;
free (temp) ;
r_qsort (a ,i ,sa ,cmp) ;
r_qsort (P (a ,(j + 1) * sa) ,na - (j + 1) ,sa ,cmp) ;
return ;
}
int int_cmp (const void *pa ,const void *pb)
{
return *(int *) pa - *(int *) pb ;
}
int main ()
{
int a[] = {9 ,9 ,3 ,3 ,2 ,2 ,8 ,8 ,6 ,1 ,6 ,0} ;
int i ;
r_qsort (a ,sizeof (a) / sizeof (int) ,sizeof (int) ,int_cmp) ;
for (i = 0 ; i
cout <
cout <
return 0 ;
}
一个未经优化版的qsort