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


真正的强者,不是没有眼泪的人,而是含着眼泪奔跑的人。