给定一个具有n个元素和整数k的数组。将数组划分为子数组,每个子数组包含k个元素

时间:2019-05-01 02:21:43

标签: arrays sub-array

例如:

输入:arr [] = {1、32、5、6、9、3}和k = 2

子数组将包含元素 {132},{56},{93}。

现在将这些子数组排序为{56},{93},{132}。将这些子数组合并在一起,并按排序顺序显示为原始数组的元素

最终输出:arr [] = {5,6,9,9,3,1,32}

2 个答案:

答案 0 :(得分:3)

void SortByGroup(vector<int>& v, int k)
{
    int n = v.size();
    int index;
    string str = " ";
    vector<pair<int, int> > arr;    
    for (int i = 0; i < n; i = i + k)
    {   
        str = " ";
        for (int j = i ; j < i+ k ; j++) 
        {
            str += to_string(v[j]);     //convert k number into string 
        }   
        arr.push_back(make_pair(atoi(str.c_str()), i)); //push string into other vector

    }
    sort(arr.begin(), arr.end()); // Sorting of array
    vector<int> res;

    for (int i = 0; i < (n / k); i++) { 
        int index = arr[i].second; //starting index of contcanate string , run k time from index to get actual no
        for (int j = 0; j < k; ++j)
        {
            res.push_back(v[index++]); 
        }   
    }
    for (int i = 0; i < n; i++) {
        cout << res[i] << " ";
    }
}

int main()
{       
    int k =2;
    vector<int> vec{ 1, 32, 5, 6, 9, 3 };
    SortByGroup(vec,k);
    return 0;       
}

答案 1 :(得分:0)

  

首先将数组划分为(n + k-1)/ k段,然后将值插入向量。   将每个段的值转换为字符串,然后创建用户定义类似结构的数据类型,该数据类型包含字符串,字符串长度和段的原始索引。根据字典顺序按字符串长度对结构进行排序。   现在,您已经对结构进行了排序,并根据结构逐个打印段。

代码实现

#include<bits/stdc++.h>
using namespace std;
struct con
{
    string str;
    int len;
    int ind;
};
bool comp(con a,con b)
{
    if(a.len<=b.len)
    {
        if(a.len==b.len)
        return a.str<b.str;
        return true;
    }
    //return true;
    return false;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        int arr[n];
        for(int i=0;i<n;i++)
        cin>>arr[i];
        int k;
        cin>>k;
        int s=n/k;
        if(n%k!=0)
        s=s+1;
        vector<int>b[s];
        int m=-1;
        for(int i=0;i<n;i++)
        {
            if(i%k==0)
            m++;
            b[m].push_back(arr[i]);
        }
        con st[s];
        for(int i=0;i<s;i++)
        {
            string str="";
            for(int j=0;j<b[i].size();j++)
            {
                str+=to_string(b[i][j]);
            }
            st[i].str=str;
            st[i].len=str.length();
            st[i].ind=i;
        }
        sort(st,st+s,comp);
        for(int i=0;i<s;i++)
        {
            m=st[i].ind;
            for(int j=0;j<b[m].size();j++)
            cout<<b[m][j]<<" ";
        }
        cout<<endl;
    }
}