按升序排列字符串数组,每个字符串按降序排列


在本文中,我们将深入探讨一个与数组和字符串操作相关的独特且有趣的问题,该问题涉及各种编程语言。问题是“按升序排列字符串数组,每个字符串按降序排列”。这个问题是提高您对字符串操作、数组和排序算法的知识的绝佳方法。

问题陈述

给定一个字符串数组,任务是按升序对数组进行排序,但每个字符串都按降序排序。

解决方案方法

我们可以使用 C++ 标准库提供的 sort 函数来解决此问题。首先,我们将每个单独的字符串按降序排序。之后,我们将按升序对整个字符串数组进行排序。

示例

以下是实现上述解决方案的程序 -

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void sortArray(char** arr, int size) {
   for (int i = 0; i < size; i++) {
      int len = strlen(arr[i]);
      for (int j = 0; j < len - 1; j++) {
         for (int k = j + 1; k < len; k++) {
            if (arr[i][j] < arr[i][k]) {
               char temp = arr[i][j];
               arr[i][j] = arr[i][k];
               arr[i][k] = temp;
            }
         }
      }
   }
    
   for (int i = 0; i < size - 1; i++) {
      for (int j = i + 1; j < size; j++) {
         if (strcmp(arr[i], arr[j]) > 0) {
            char* temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
         }
      }
   }
}
int main() {
   char* arr[] = {
      malloc(sizeof(char) * (4 + 1)), // "acb" + null terminator
      malloc(sizeof(char) * (4 + 1)), // "bca" + null terminator
      malloc(sizeof(char) * (4 + 1))  // "abc" + null terminator
   };

   strcpy(arr[0], "acb");
   strcpy(arr[1], "bca");
   strcpy(arr[2], "abc");

   int size = sizeof(arr) / sizeof(arr[0]);

   sortArray(arr, size);

   printf("The sorted array is: ");
   for (int i = 0; i < size; i++) {
      printf("%s ", arr[i]);
      free(arr[i]); // free the allocated memory for each string
   }
   printf("\n");
   return 0;
}

输出

The sorted array is: cba cba cba
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;

void sortArray(vector<string>& arr) {
   for(string& str : arr) {
      sort(str.begin(), str.end(), greater<char>());
   }
   sort(arr.begin(), arr.end());
}

int main() {
   vector<string> arr = {"acb", "bca", "abc"};
   sortArray(arr);
   cout << "The sorted array is: ";
   for(const string& str : arr) {
      cout << str << " ";
   }
   cout << endl;
   return 0;
}	  

输出

The sorted array is: cba cba cba 
import java.util.Arrays;

public class Main {
   public static void sortArray(String[] arr) {
      for (int i = 0; i < arr.length; i++) {
         char[] charArray = arr[i].toCharArray();
         Arrays.sort(charArray);
         arr[i] = new StringBuilder(new String(charArray)).reverse().toString();
      }

      Arrays.sort(arr);
   }

   public static void main(String[] args) {
      String[] arr = {"acb", "bca", "abc"};
      sortArray(arr);
      System.out.print("The sorted array is: ");
      for (String str : arr) {
         System.out.print(str + " ");
      }
      System.out.println();
   }
}

输出

The sorted array is: cba cba cba
def sort_array(arr):
   for i in range(len(arr)):
      arr[i] = ''.join(sorted(arr[i], reverse=True))
   
   arr.sort()

arr = ["acb", "bca", "abc"]
sort_array(arr)
print("The sorted array is:", ' '.join(arr))

输出

The sorted array is: cba cba cba

带测试用例的解释

让我们考虑字符串数组 {"acb", "bca", "abc"}。

当我们将此数组传递给 sortArray 函数时,它首先按降序对每个字符串进行排序。数组变为 {"cba", "cba", "cba"}。

然后它按升序对字符串数组进行排序。但是,由于所有字符串都相同,因此排序后的数组保持 {"cba", "cba", "cba"}。

结论

此问题展示了 sort() 函数的独特用例。这是一个练习编码技能并了解如何排序字符串和数组的绝佳问题。

更新于: 2023-10-27

352 次查看

开启您的 职业生涯

通过完成课程获得认证

开始
广告