首页 > 试题广场 >

字符串内排序

[编程题]字符串内排序
  • 热度指数:15243 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入一个字符串,长度小于等于200,然后将输出按字符顺序升序排序后的字符串。

输入描述:
测试数据有多组,输入字符串。


输出描述:
对于每组输入,输出处理后的结果。
示例1

输入

bacd

输出

abcd
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<math.h>

void kuaipai(char a[],int h,int r)
{
    char c = a[h];
    int f = h, e = r;
    while (h < r)
    {
        while (h<r&&a[r] >= c)
            r--;
        a[h] = a[r];
        while (h<r&&a[h] < c)
            h++;
        a[r] = a[h];
    }
    a[h] = c;
    if (f < e)
    {
        kuaipai(a, f, h - 1);
        kuaipai(a, h + 1, e);
    }
}

int main()
{
    char s[200];
    while (scanf("%s", s) != EOF)
    {
        int n = strlen(s);
        kuaipai(s, 0, n-1);
        printf("%s\n", s);
    }
}
编辑于 2024-02-04 11:14:37 回复(0)
#include <stdio.h>
#include <string.h>
typedef int Position;
// 快排
Position partion(char *str, int low, int high)
{
  char pivot = str[low];
  while (low < high)
  {
    while (low < high && str[high] >= pivot)
      high--;
    str[low] = str[high];
    while (low < high && str[low] <= pivot)
      low++;
    str[high] = str[low];
  }
  str[low] = pivot;
  return low;
}
void QuickSort(char *str, int low, int high)
{
  if (low < high)
  {
    Position pivotProps = partion(str, low, high);
    QuickSort(str, low, pivotProps - 1);
    QuickSort(str, pivotProps + 1, high);
  }
}
int main()
{
  char str[200];
  while (scanf("%s", str) != EOF)
  { // 注意 while 处理多个 case
    QuickSort(str, 0, strlen(str) - 1);
    printf("%s", str);
  }
  return 0;
}

发表于 2022-03-21 19:41:39 回复(0)