您的位置:首页 > 其它

整数排序 华为入职前培训练习题

2016-02-24 20:38 232 查看
整数排序
描述: 实现输入一组大于等于0的整数,根据从小到大的顺序排序后输出,排序后有连续数时,

只输出连续数中最小和最大的两个数。
题目类别:排序
难度:高级
运行时间限制:10Sec
内存限制:128MByte
阶段:入职前练习
输入:一组大于等于0的整数,不考虑非法输入,各个整数之间以逗号(“,”)分隔,

输入字符串的总长度小于等于100个字节。
输出:排序后的值,各个整数之间以空格分隔。
样例输入:
1,4,3,110,2,90,7

样例输出:
1 4 7 90 110

答案提示:
#include <stdio.h>

#include <stdlib.h>

#include <string>

#include <vector>

#include <iostream>

using namespace std;

bool INTSort(int *input,int len,int *output)

{

if (NULL == input || NULL == output)

{

return false;

}

int ilen = 0;

int *iOutput = output;

int ifirst = 0;

int inext = 0;

int ilast = 0;

if (len < 3)

{

for (size_t i = 0; i < len; i++)

{

iOutput[ilen++] = input[i];

}

}

int j = 0;

iOutput[0] = input[0];

ilen = 0;

int iflag = 0;

for (size_t i = 1; i < len; i++)

{

if (input[i] - input[i - 1] == 1)

{

if (i == 1)

ilen++; //i = 1时,加1下

if (iflag)

{

iflag = 0;

ilen++;

}

iOutput[ilen] = input[i]; //

continue;

}

else

{

iflag = 1;

ilen++;

iOutput[ilen] = input[i]; //

}

}

iOutput[++ilen] = '\0';

return true;

}

int main(int argc, char**argv)

{

string string;

vector<int>iVec;

int pszNumBuf[100] = { 0 };

//int pszOutput[100] = { 0 };

int iCount = 0;

while (getline(cin,string))

{

iCount = 0;

int itmp = 0;

for (size_t i = 0; i<string.size(); i++)

{

if (string[i]>='0' &&string[i]<='9')

{

itmp = itmp * 10 + string[i] - '0';

}

else if(string[i] == ',')

{

pszNumBuf[iCount++] = itmp;

itmp = 0;

}

else

{

cout << "包含不合适的字符" << endl;

}

}

pszNumBuf[iCount++] = itmp;

pszNumBuf[iCount] = '\0';

/*for (size_t i = 0; i < iCount; i++)

{

cout << pszNumBuf[i] << ';';

}

cout << endl;*/

/*排序*/

for (size_t i = 0; i < iCount - 1; i++)

{

for (size_t k = 0; k < iCount - 1 - i; k++)

{

if (pszNumBuf[k] > pszNumBuf[k+1])

{

int tmp = pszNumBuf[k];

pszNumBuf[k] = pszNumBuf[k + 1];

pszNumBuf[k + 1] = tmp;

}

}

}

/*for (size_t i = 0; i < iCount; i++)

{

cout << pszNumBuf[i] << ',';

}

cout << endl;*/

/*输出一下,看看*/

int *pszOutput = (int *)malloc(sizeof(int)*(iCount + 1));

memset(pszOutput, 0, iCount + 1);

bool b = INTSort(pszNumBuf, iCount , pszOutput);

if (b)

{

int i = 0;

for (i = 0; pszOutput[i+1] != '\0'; i++)

{

cout << pszOutput[i] << ' ';

}

cout << pszOutput[i] << endl;

}

free(pszOutput);

}

system("pause");

return 0;

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