将一串数字以空格间隔的方式输入,并以插入排序的方式进行升序排序,最后输出

本文介绍了一种使用C++实现的插入排序算法,通过将输入的数字字符串转换为双精度浮点数数组,然后进行升序排序并输出。插入排序是一种简单直观的排序方法,适用于小规模数据或部分有序的数据集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

将一串数字以空格间隔的方式输入,并以插入排序的方式进行升序排序,最后输出。
例如:
输入:1 3 44 2
输出:1 2 3 44

插入排序的基本思想:每一步将一个待排序的元素按照其值的大小插入到已排序序列的适当位置上,直到待排序元素插入完为止。

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;

inline double stringTodouble(const string& s){
    //用于将字符串转换为double实数
    //因为要调用多次,将其置为内联函数
    double d;
    istringstream is(s);
    is>>d;
    return d;
}

void stringsplit(const string s,vector<double>& v){
    string temp;
    istringstream stream(s);
    while(stream>>temp)
        v.push_back(stringTodouble(temp));
}

void insertSort(vector<double>& V,int n){
    //将当前移动的数从后面开始对比,逐步前移
    int i,j;
    for(i=1;i<n;i++){
        j=i;
        double temp=V[i];
        while(j>0 && temp<V[j-1]){
            V[j] = V[j-1];  //后移
            j--;
        }
        V[j] = temp;
    }
}

void printSort(const vector<double> v){
    cout<<"排序后的结果是:";
    for(int x=0;x<v.size();x++)
        cout<<v[x]<<" ";
}

int main()
{
    string str;
    vector<double> v;
    cout<<"输入数字进行插入排序:"<<endl;
    getline(cin,str);
    stringsplit(str,v);         //将数从字符串分割后放入容器
    insertSort(v,v.size());     //进行插入排序
    printSort(v);               //输出排序后的序列
    cout<<endl;
    return 0;
}
请编写程序实现上述功能。 备注:这里约定一个字符串不能称为自己的前缀。若用户输入字符串恰好是字典中的一个单词,则该单词不必向用户建议。 输入格式: 输入一行为3个正整数n、m、k。n为字典中单词个数。m为用户查询数,即用户输入的单词个数。对于用户输入的每个字符串,程序需要返回字典中以该字符串为前缀的、历史使用频率最高的k个单词。接下来n行,表示字典信息,每行为1个整数和1个字符串整数表示单词的历史使用频率,字符串表示单词,请注意,单词包含的每个字符为a-z的小写字母或0-9的数字,即数字也可能构成字典中的单词。字典内的单词并非按使用频率有序存放。接下来m行,表示用户的查询,每行为一个a-z的小写字母或0-9的数字组成的字符串,表示用户的查询。另外请注意,由于字典往往是在用户历史数据的基础上加工而得,所以字典中可能出现重复单词,若某个单词在字典中出现多次,则其历史使用频率以最高者为准。 (n ≤ 10000, m ≤ 20000, k ≤ 10, 每个单词长度不超过20,单词历史使用频率小于2 31 ) 输出格式: 对于用户输入的每个字符串,按使用频率降序输出字典中以该字符串为前缀的、历史使用频率最高的k个单词,每个占1行。若多个单词历史使用频率相同,则字典序靠前的单词排名靠前。若单词中包含数字,则字典序以ACSII码判定,即0<1<2<…<9<a<b<c<…<z。若字典中满足输出条件的单词个数大于0小于k,则有多少就输出多少个。若字典中没有满足输出条件的单词,则输出“no suggestion”。针对用户每个查询所输出的信息,用空行间隔输入样例: 20 3 4 1827187200 the 1595609600 to 1107331800 that 401542500 this 334039800 they 282026500 their 250991700 them 196118888 these 150877900 than 144968100 time 125563600 then 109336600 two 196120000 there 87862100 those 79292500 through 75885600 the 71578000 think 67462300 2 65648600 tx356 57087700 though th xxx the 输出样例: the that this they no suggestion they their them there c/c++这里的字典树用数组实现
最新发布
03-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值