C语言 二维指针 quick sort

void quicksort(int a[], int low, int high)
{
int middle;
if (low >= high) return;
middle = split(a, low, high);
quicksort(a, low, middle - 1);
quicksort(a, middle + 1, high);
}

int split(int a[], int low, int high)
{
int part_element = a[low];
for (;;) {
while (low < high && part_element <= a[high])
high--;
if (low >= high) break;
a[low++] = a[high];
while (low < high && a[low] <= part_element)
low++;
if (low >= high) break;
a[high--] = a[low];
}
a[high] = part_element;
return high;
}
由上面两个函数改进一下,该怎么写啊?
怕大家无法理解题意,就是排序字符串,先按首字母排序,首字母相同就看第二个字母,以此类推。

第1个回答  2014-06-13
// myConsole2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <string.h>
#define MAXSIZE 128
int split(char* a[MAXSIZE], int low, int high);

void quicksort(char* a[MAXSIZE], int low, int high)
{
int middle;
if (low >= high) return;
middle = split(a, low, high);
quicksort(a, low, middle - 1);
quicksort(a, middle + 1, high);
}

int split(char* a[MAXSIZE], int low, int high)
{
char* part_element = a[low];
for (;;) {
while (low < high && strcmp(part_element,a[high])<=0)
high--;
if (low >= high) break;
a[low++] = a[high];
while (low < high && strcmp(a[low],part_element) <= 0)
low++;
if (low >= high) break;
a[high--] = a[low];
}
a[high] = part_element;
return high;
}

int main(int argc, _TCHAR* argv[])
{
char ** strList = new char *[10];
for (int i = 0;i < 10;i ++)
{
strList[i] = new char [MAXSIZE];
memset(strList[i],0,MAXSIZE);
scanf("%s",strList[i]);
}
quicksort(strList,0,9);

printf("\n");
for (int i = 0;i < 10;i ++)
{
printf("%s\n",strList[i]);
delete []strList[i];
strList[i] = NULL;
}
delete[]strList;
strList = NULL;

return 0;
}追问

split和quicksort的传入参数可以用二维指针做吗?
void quicksort(char **low,char **high);
char** split(char **low,char **high);

追答

可以

相似回答
大家正在搜