Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी ++ में ट्रांसफॉर्मेड ऐरे को सॉर्ट करें

मान लीजिए कि हमारे पास पूर्णांक संख्याओं और पूर्णांक मानों a, b और c की एक क्रमबद्ध सरणी है। हमें सरणी के प्रत्येक अवयव x में f(x) =ax^2 + bx + c रूप का द्विघात फलन लागू करना है। और अंतिम सरणी क्रमबद्ध क्रम में होनी चाहिए।

इसलिए, यदि इनपुट nums =[-4,-2,2,4], a =1, b =3, c =5 जैसा है, तो आउटपुट [3,9,15,33]

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • फ़ंक्शन f() को परिभाषित करें, जो x, a, b, c -

    . लेता है
  • वापसी कुल्हाड़ी^2 + बीएक्स + सी

  • मुख्य विधि से निम्न कार्य करें -

  • n :=अंकों का आकार

  • प्रारंभ:=0, अंत:=n-1

  • आकार n के सरणी रिट को परिभाषित करें

  • अगर एक>=0, तो -

    • इनिशियलाइज़ करने के लिए i :=n-1, जब i>=0, अपडेट करें (i से 1 घटाएं), −

      करें
      • x :=f(nums[start], a, b, c)

      • y :=f(nums[end], a, b, c)

      • यदि x> y, तो -

        • (शुरुआत को 1 से बढ़ाएं)

        • रिट[i] :=x

      • अन्यथा

        • रिट[i] :=y

        • (अंत में 1 से घटाएं)

  • अन्यथा

    • इनिशियलाइज़ i:=0 के लिए, जब i

      • x :=f(nums[start], a, b, c)

      • y :=f(nums[end], a, b, c)

      • यदि x

        • (शुरुआत को 1 से बढ़ाएं)

        • रिट[i] :=x

      • अन्यथा

        • रिट[i] :=y

        • (अंत में 1 से घटाएं)

  • वापसी रिट

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#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:
   int f(int x, int a, int b, int c){
      return a * x * x + b * x + c;
   }
   vector<int< sortTransformedArray(vector<int<& nums, int a, int b, int c) {
      int n = nums.size();
      int start = 0;
      int end = n - 1;
      vector<int< ret(n);
      if (a >= 0) {
         for (int i = n - 1; i >= 0; i--) {
            int x = f(nums[start], a, b, c);
            int y = f(nums[end], a, b, c);
            if (x > y) {
               start++;
               ret[i] = x;
            }
            else {
               ret[i] = y;
               end--;
            }
         }
      }
      else {
         for (int i = 0; i < n; i++) {
            int x = f(nums[start], a, b, c);
            int y = f(nums[end], a, b, c);
            if (x < y) {
               start++;
               ret[i] = x;
            }
            else {
               ret[i] = y;
               end--;
            }
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<int< v = {-4,-2,2,4};
   print_vector(ob.sortTransformedArray(v, 1, 3, 5));
}

इनपुट

{-4,-2,2,4}, 1, 3, 5

आउटपुट

[3, 9, 15, 33, ]

  1. C++ प्रोग्राम काउंटिंग सॉर्ट को लागू करने के लिए

    काउंटिंग सॉर्ट एक स्थिर छँटाई तकनीक है, जिसका उपयोग वस्तुओं को छोटी संख्याओं की कुंजियों के अनुसार क्रमबद्ध करने के लिए किया जाता है। यह उन कुंजियों की संख्या की गणना करता है जिनके प्रमुख मान समान हैं। यह छँटाई तकनीक कुशल है जब विभिन्न कुंजियों के बीच का अंतर इतना बड़ा नहीं है, अन्यथा यह स्थान की जट

  1. सी ++ प्रोग्राम हीप सॉर्ट एल्गोरिथम का उपयोग करके 10 तत्वों की एक सरणी को सॉर्ट करने के लिए

    हीप सॉर्ट बाइनरी हीप डेटा संरचना पर आधारित है। बाइनरी हीप में पैरेंट नोड के चाइल्ड नोड्स अधिकतम हीप के मामले में उससे छोटे या उसके बराबर होते हैं, और पैरेंट नोड के चाइल्ड नोड्स मिन हीप के मामले में उससे बड़े या उसके बराबर होते हैं। हीप सॉर्ट में सभी चरणों की व्याख्या करने वाला एक उदाहरण इस प्रकार ह

  1. एक सी ++ फ़ंक्शन में एक सरणी पास करना

    C++ फ़ंक्शन के तर्क के रूप में संपूर्ण सरणी को पारित करने की अनुमति नहीं देता है। हालांकि, आप किसी इंडेक्स के बिना ऐरे का नाम निर्दिष्ट करके किसी ऐरे को पॉइंटर पास कर सकते हैं। यदि आप किसी फ़ंक्शन में एक एकल-आयाम सरणी को तर्क के रूप में पास करना चाहते हैं, तो आपको निम्नलिखित तीन तरीकों में से एक मे