用C++语言实现C中的qsort函数,怎出现内存错误,元芳,你怎么看
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
void qiuck_sort(void *base, size_t left, size_t right, size_t size, int(*compar)(const void*, const void*))
{
size_t p = (left + right) / 2;
void *pi = malloc (size);
memcpy(pi, (char*)base + p *size, size);
for (size_t i = left, j = right; i < j;) {
while(!(i >= p || compar(pi, (char*)base + i *size) < 0))
++i;
if (i < p) {
memcpy((char*)base + p*size, (char*)base + i*size, size);
p = i;
}
while(!(j <= p || compar((char*)base + j*size, pi)<0)) ++j;
if (j > p) {
memcpy((char*)base + p*size, (char*)base + j*size, size);
p = j;
}
}
memcpy((char*)base + p*size, pi, size);
if(p - left > 1)
qiuck_sort(base, left, p - 1, size, compar);
if(right - p > 1)
qiuck_sort(base, p+1, right, size, compar);
}
void qsort(void *base, size_t member, size_t size, int(*compar)(const void*, const void*))
{
qiuck_sort(base, 0, member - 1,size, compar);
}
int compar_int (const void *p1, const void *p2) {
return *(const int*)p1 - *(const int*)p2;
}
int compar_str(const void *s1, const void *s2)
{
return strcmp(*(const char**)s1, *(const char**)s2);
}
int main() {
int data[] = {43, 54,23,56,7,34,75,9,43};
size_t size = sizeof(data[0]);
size_t member = sizeof(data) / size;
qsort(data, member, size, compar_int);
for (size_t i = 0; i < member; i++)
cout<<data[i]<<" ";
cout<<endl;
const char *s[] = {"china", "japan", "american", "russia", "france"};
size = sizeof(s[0]);
member = sizeof(s) / size;
qsort(s, member, size, compar_str);
for (size_t i = 0; i < member; i++) {
cout<<s[i]<<" ";
}
cout<<endl;
return 0;