您的位置:首页 > 编程语言

编程算法 - 把数组排成最小的数 代码(C)

2014-07-01 09:53 330 查看

把数组排成最小的数 代码(C)

本文地址: http://blog.csdn.net/caroline_wendy

题目: 输入一个正整数数组, 把数组里所有数字拼接起来排成一个数, 打印能拼接出的所有数字中最小的一个.

大数转换为字符串, 重载快速排序比较方法, 进行排序, 最后拼接.

代码:
/*
* main.cpp
*
* Created on: 2014.6.12
* Author: Spike
*/

/*eclipse cdt, gcc 4.8.1*/

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

int compare(const void* strNumber1, const void* strNumber2) {
const int MaxNumberLength = 10;
char* strCombine1 = new char[MaxNumberLength*2 + 1];
char* strCombine2 = new char[MaxNumberLength*2 + 1];

strcpy(strCombine1, *(const char**)strNumber1);
strcat(strCombine1, *(const char**)strNumber2);

strcpy(strCombine2, *(const char**)strNumber2);
strcat(strCombine2, *(const char**)strNumber1);

int result = strcmp(strCombine1, strCombine2);

delete[] strCombine1;
delete[] strCombine2;

return result;
}

void PrintMinNumber (int* numbers, int length) {
const int MaxNumberLength = 10;
if (numbers == NULL || length <= 0)
return;
char** strNumbers = (char**)(new int[length]);
for (int i=0; i<length; ++i) {
strNumbers[i] = new char[MaxNumberLength + 1];
sprintf(strNumbers[i], "%d", numbers[i]);
}
qsort(strNumbers, length, sizeof(char*), compare);

for (int i=0; i<length; ++i)
printf("%s", strNumbers[i]);
printf("\n");

for (int i=0; i<length; ++i)
delete[] strNumbers[i];
delete[] strNumbers;
}

int main(void)
{
int input[] = {3, 32, 321};
PrintMinNumber(input, 3);

return 0;
}


输出:
321323


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息