有没有办法在不使用任何迭代的情况下将字符的字母顺序排列

Is there a way to alphabetize the characters in a string without using any iteration?

本文关键字:情况下 字符 排列 顺序 迭代 任何 有没有      更新时间:2023-10-16

我正在尝试编写一个可以字母顺序将字符数组的函数(使用递归(。我无法在此功能中使用任何迭代循环,而我最初的尝试存在缺陷。如果我也不能使用任何内置的函数内置的C ,我想知道此任务的可能性

string alphaSort(string s) {
    if (s.length() == 0|| s.length()==1) { //end of string
        return s;
    }
    else {
        if (s[0] > s[s.length()-1]) {
            char temp = s[s.length() - 1];
             s[s.length() - 1]=s[0];
             s[0] = temp;
            return  alphaSort(s.substr(0, s.length() - 1) )+s[s.length() - 1];
        }
        else {
            return s[0]+alphaSort(s.substr(1, s.length() - 1));
        }
    }
}

这是使用递归的片段,而无需基于气泡排序算法的循环。

void swap(char* src, char* dest) { 
    char temp = *src;
    *src = *dest;
    *dest = temp;
}
void foo(string& p, int i=0, int j = 1) {
    static int n = p.size();    
    if (i == n - 2) return; // exit function if the index is total = (entries -2)
    if (j > n - 1) {
        ++i;  // increment index i to check next lot
        j = i+1;
    }
    if (p[i] > p[j]) swap(&p[i], &p[j]);
    foo(p, i, ++j);
}
int main()
{
    string s="zello";
    foo(s);
    cout << s;
}

这是您想法的变体。

#include <iostream>
using namespace std;
string f(string s) {
  if (s.length() < 2)
    return s;
  string sorted = f(s.substr(1, s.length() - 1));
  if (s[0] <= sorted[0])
    return string(1, s[0]) + sorted;
  else
    return f(string(1, sorted[0]) + s[0] + sorted.substr(1, sorted.length() - 1));
}
int main()
{
  string s = "yxab";
  cout << f(s);
}
相关文章: