Code the smallest number of arrays (c)
Address: http://blog.csdn.net/caroline_wendy
Question: enter a positive integer array, splice all the numbers in the array into a number, and print the smallest of all the numbers that can be concatenated.
Large NumberConvertString, Heavy loadQuick sortingOfComparison Method.
Code:
/* * 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;}
Output:
321323