[Algorithms]算法题:字符串转换为整数并排序
keywords: [Algorithms]算法题:字符串转换为整数并排序
题目:
给定一组字符串,字符串中的字符都是数字,比如:“343”、“4521”、“3”,将这些字符串转换为整数后并升序排序。
代码:
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
int main(int argc, char* argv[])
{
std::vector<std::string> StrArr;
StrArr.push_back(std::string("563435"));
StrArr.push_back(std::string("234234"));
StrArr.push_back(std::string("454"));
StrArr.push_back(std::string("5765"));
StrArr.push_back(std::string("12"));
StrArr.push_back(std::string("6"));
//字符串转数字
std::vector<int> IntArr;
for (std::string& str : StrArr)
{
size_t len = str.length();
int val = 0;
for (size_t i = 0; i < len; i++)
{
char c = str.at(i);
//判断是不是阿拉伯数字
if (c < 48 || c > 57)
{
continue;
}
int iv = c - 48;
val += pow(10, (len - 1 - i)) * iv;
}
IntArr.push_back(val);
}
//冒泡排序。升序
for (size_t i = 0; i < IntArr.size(); i++)
{
int iv = IntArr[i];
for (size_t j = 1; j < IntArr.size(); j++)
{
int jv = IntArr[j];
int jv_prev = IntArr[j - 1];
if (jv < jv_prev)
{
IntArr[j] = jv_prev;
IntArr[j - 1] = jv;
}
}
}
for (int v : IntArr)
{
std::cout << v << std::endl;
}
system("pause");
}
输出结果:
6
12
454
5765
234234
563435
参考
快速排序
//快速排序
void quick_sort(int s[], int l, int r)
{
if (l < r)
{
//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); // 递归调用
quick_sort(s, i + 1, r);
}
}
参考自:
https://blog.csdn.net/MoreWindows/article/details/6684558
真正的强者,不是没有眼泪的人,而是含着眼泪奔跑的人。