当前位置:C++技术网 > 资讯 > C语言高级应用--多级指针快排

C语言高级应用--多级指针快排

更新时间:2015-07-20 16:32:02浏览次数:1+次

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int getArrayMem(char*** mp, char* myArray1[], int n, char* str, int* count);
int sortArray(char** p, int count);
int SortArrayAndGen3Mem(char*** myArray3, char* myArray1[], int n, char* str, int* num);
int printArray(char** p, int num);
int freeArray(char*** newFree, int num);

int main(void)
{
int ret = 0;
char **myArray3 = NULL;
int num3 = 0;
//第一种内存模型
char *myArray[] = {"bbbbb", "aaa", "ccccccc"};//指针数组
char *myp = "1111111ddd";//字符数组
//要求:将myArray和myp合并为一个字符串存到myArray3里,排序后甩出来
SortArrayAndGen3Mem(&myArray3, myArray, 3, myp, &num3);
printf("\n排序之后:\n");
ret = printArray(myArray3, num3);
if(0 != ret)
{
printf("func printArray() err:%d\n", ret);
return ret;
}

if(NULL != myArray3)
{
ret = freeArray(&myArray3, num3);
if(0 != ret)
{
printf("func freeArray() err:%d\n", ret);
return ret;
}
}
system("pause");
}

int SortArrayAndGen3Mem(char*** myArray3, char* myArray1[], int n, char* str, int* num)
{
int i = 0, j = 0, count = 0;
char** myp = NULL;
getArrayMem(&myp, myArray1, n, str, &count);

for(i = 0; i < n; i++)
{
strcpy(myp[i], myArray1[i]);
}
strcpy(myp[i], str);
printf("排序之前:\n");
printArray(myp, count);
sortArray(myp, count);
*num = count;
*myArray3 = myp;
}

int sortArray(char** p, int count)
{
char tmp[100];
int i = 0, j = 0;
for(i = 0; i < count - 1; i++)
{
for(j = i + 1; j < count - 1; j++)
{
if(strcmp(p[i], p[j]) > 0)
{
strcpy(tmp, p[i]);
strcpy(p[i], p[j]);
strcpy(p[j], tmp);
}
}

}
}

int getArrayMem(char*** mp, char* myArray1[], int n, char* str, int* count)
{
int tmpNum = 0, i = 0, tmpCount = 0, rv = 0;
char** p = NULL;
tmpNum = n + 1;
p = (char**)malloc(tmpNum*sizeof(char*));
if(NULL == p)
{
rv = -1;
printf("func getArrayMem() NULL == p err:%d\n", rv);
return rv;
}

for(i = 0; i < n; i++, tmpCount++)
{
p[i] = (char*)malloc((strlen(myArray1[i])*sizeof(char))+1);
if(NULL == p[i])
{
rv = -1;
printf("func getArrayMem() NULL == p[i] err:%d\n", rv);
return rv;
}
}
p[i] = (char*)malloc((strlen(str)*sizeof(char))+1);
if(NULL == p[i])
{
rv = -1;
printf("func getArrayMem() NULL == p[i] err:%d\n", rv);
return rv;
}
tmpCount++;
*count = tmpCount;

*mp = p;
}

int printArray(char** p, int num)
{
int i = 0, rv = 0;
if(NULL == p)
{
rv = -1;
printf("NULL == p err:%d\n", rv);
return rv;
}

for(i = 0; i < num; i++)
{
printf("%s \n", p[i]);
}

return rv;
}

int freeArray(char*** newFree, int num)
{
int rv = 0, i = 0;
char** tmpArray = NULL;
tmpArray = *newFree;
if(NULL == newFree)
{
rv = -1;
printf("ULL == newFree err:%d\n", rv);
return rv;
}
for(i = 0; i < num; i++)
{
if(NULL != tmpArray[i])
{
free(tmpArray[i]);
}
}
free(tmpArray);
*newFree = NULL;
//if(NULL != tmpArray)
//{
// free(tmpArray);
// tmpArray = NULL;
//}

return rv;
}