按升序排列字串陣列,每個字串按降序排列


在本文中,我們將深入探討一個與陣列和字串操作相關的獨特且有趣的問題,該問題涉及各種程式語言。問題是“按升序排列字串陣列,每個字串按降序排列”。這個問題是提高您對字串操作、陣列和排序演算法的知識的絕佳方法。

問題陳述

給定一個字串陣列,任務是按升序對陣列進行排序,但每個字串都按降序排序。

解決方案方法

我們可以使用 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 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.