1
快速排序功能的通用QUICKSORT这需要比较器来比较不同类型的数据类型的用户定义在C
我doubts-
- >可以我们通过字符整数或阵列的阵列为void *
- >如果是....我应该怎么键入突入我的快速排序功能
#include<stdio.h>
#include<stdlib.h>
int compareInt(void * a, void *b) {
if (*(int*)a > *(int*)b)
return 1;
else if (*(int*)a < *(int*)b)
return -1;
return 0;
}
int compareFloat(void * a, void *b) {
if (*(float*)a > *(float*)b)
return 1;
else if (*(float*)a < *(float*)b)
return -1;
return 0;
}
int compareChar(void * a, void *b) {
if (*(char*)a >*(char*)b)
return 1;
else if (*(char*)a < *(char*)b)
return -1;
return 0;
}
void quickSort(void** A, int left, int right,int (*compare)(void*,void*)) {
void* temp;
if (right <= left)
return;
if (compare(A[right],A[left]) < 0) {
temp = A[right];
A[right] = A[left];
A[left] = temp;
}
int pLow = left + 1;
int pHigh = right - 1;
int i = left + 1;
while (i <= pHigh) {
if (compare(A[i],A[left]) < 0) {
temp = A[i];
A[i++] = A[pLow];
A[pLow++] = temp;
}
else if (compare(A[right],A[i]) < 0) {
temp = A[i];
A[i] = A[pHigh];
A[pHigh--] = temp;
}
else i++;
}
temp = A[left];
A[left] = A[--pLow];
A[pLow] = temp;
temp = A[right];
A[right] = A[++pHigh];
A[pHigh] = temp;
quickSort(A, left, pLow - 1,compare);
if (compare(A[pLow],A[pHigh]) < 0)
quickSort(A, pLow + 1, pHigh - 1,compare);
quickSort(A, pHigh + 1, right,compare);
}
主要功能 - 前投中那些主要功能 没有转换为void **;我可以通过它作为void *吗?
int main(void){
int arr1[12] = { 2, 1, 2, 23, 13, 3, 92, 3, 54, 65, 7, 7 };
void** arr = (void **)malloc(sizeof(void *) * 12);
int i = 0;
for (i = 0; i<12; i++){
arr[i] = (void *)&arr1[i];
printf("\n%d",arr[i]);
}
//int (*compare)(void*,void*) = &compareFloat;
quickSort(arr, 0,11,&compareInt);
printf("\n%d",*(int *)arr1[3]);
}
你可以传递整数数组'无效*'。这就是为什么'void *'存在的原因。但是,你为什么不把'arr1'传递给'quicksort'函数呢? – tilz0R
如果我这样做....我需要一个临时变量(无效*温度)交换数据....然后我该如何处理(我不能有一个变量作为无效临时) –
int temp '? – tilz0R