C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++での大から小へのソート


整数numのリストがあるとすると、この方法でリストをソートする必要があります-

  • 最初の要素は最大です

  • 2番目の要素は最小です

  • 3番目の要素は2番目の最大値です

  • 4番目の要素は2番目の最小値です

など。

したがって、入力が[6,3,10,4]の場合、出力は[10、3、6、4]

になります。

これを解決するには、次の手順に従います-

  • 配列retを定義する

  • 配列番号を並べ替える

  • j:=numsのサイズ-1

  • i:=0

  • i <=jの場合、-

    • retの最後にnums[j]を挿入します

    • (jを1つ減らします)

    • i <=jの場合、-

      • retの最後にnums[i]を挿入します

      • (iを1増やします)

  • retを返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
   public:
   vector<int> solve(vector<int> & nums) {
      vector<int> ret;
      sort(nums.begin(), nums.end());
      int j = nums.size() - 1;
      int i = 0;
      while (i <= j) {
         ret.push_back(nums[j]);
         j--;
         if (i <= j) {
            ret.push_back(nums[i]);
            i++;
         }
      }
      return ret;
   }
};
main() {
   Solution ob;
   vector<int> v = {6,3,10,4};
   print_vector(ob.solve(v));
}

入力

{6,3,10,4}

出力

10, 3, 6, 4

  1. C++でゲームVをジャンプする

    arrと呼ばれる整数の配列と整数dがあるとします。 1つのステップで、インデックスiから-にジャンプできます。 i + xここで、i +x

  2. C++での3方向マージソート

    マージソートでは、配列を再帰的に2つの部分に分割し、ソートして最後にマージします。マージソートの変形は、配列を2つの部分に分割する代わりに、3つの部分に分割する3方向のマージソートとして扱われます。 マージソートは、配列を再帰的にサイズが半分のサブ配列に分解します。同様に、3方向マージソートは配列をサイズの3分の1のサブ配列に分解します。 例 Input : 46, -1, -44, 79, 31, -41, 11, 20 , 74, 94 Output : -44 -41 -1 11 20 31 46 74 79 94 Input : 24, -18 Output : -18 24 3