一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序。思路:先进行字符串排序,用堆排序,按降序排列,排列依据字母对应的ascii值。排序之后按字符类别进行翻转。时间复杂度O(nlogn)
#include<string>
#include<iostream>
using namespace std;
void swap(char* a, char* b) {
char temp = *a;
*a= *b;
*b = temp;
}
void heapAdjust(char* str, int i, int length) {
int lchild = 2 * i + 1;
int rchild = 2 * i + 2;
int minIndex;
if (lchild < length && str[lchild] < str[i])
minIndex = lchild;
else
minIndex = i;
if (rchild < length && str[rchild] < str[minIndex])
minIndex = rchild;
if (minIndex != i) {
swap(str + i, str + minIndex);
heapAdjust(str, minIndex, length);
}
}
void heapSort(char* str, int length) {
int i;
for (i = length / 2; i >