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

सी ++ प्रोग्राम रैंडमाइजेशन का उपयोग करके त्वरित सॉर्ट को लागू करने के लिए

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

इस मामले में हम धुरी तत्व को बेतरतीब ढंग से चुन रहे हैं। पिवट चुनने के बाद, हम विभाजन कर रहे हैं, फिर सरणी को पुनरावर्ती रूप से क्रमबद्ध करें।

क्विकॉर्ट तकनीक की जटिलता

  • समय की जटिलता − O(n log n) सर्वोत्तम मामले और औसत मामले के लिए, O(n 2 ) सबसे खराब स्थिति के लिए।

  • अंतरिक्ष जटिलता -ओ(लॉग एन)

इनपुट - क्रमबद्ध सूची:90 45 22 11 22 50
आउटपुट - क्रमबद्ध करने के बाद सरणी:11 22 22 45 50 90

एल्गोरिदम

विभाजन (सरणी, निचला, ऊपरी)

इनपुट -डेटा सेट सरणी, निचली सीमा और ऊपरी सीमा

आउटपुट - सही स्थिति में पिवट करें

Begin
   index := lower
   pivot := higher
   for i in range lower to higher, do
      if array[i] < array[pivot], then
         exchange the values of array[i] and array[index]
         index := index + 1
   done
   exchange the values of array[pivot] and array[index]
End

random_pivot_partition(सरणी, निचला, ऊपरी)

इनपुट - डेटा सेट सरणी, निचली सीमा और ऊपरी सीमा

आउटपुट − बेतरतीब ढंग से चुनी गई धुरी का अंतिम सूचकांक

Begin
   n := a random number
   pvt := lower + n mod (upper – lower + 1)
   exchange the values of array[pivot] and array[upper]
   index := Partition(array, lower, upper)
   return index
End

quickSort(सरणी, बाएँ, दाएँ)

इनपुट - डेटा की एक सरणी, और सरणी की निचली और ऊपरी सीमा

आउटपुट - क्रमबद्ध सरणी

Begin
   if lower < right then
      q = random_pivot_partition(array, left, right).
      quickSort(array, left, q-1)
      quickSort(array, q+1, right)
End

उदाहरण कोड

#include<iostream>
#include<cstdlib>
#include<ctime>
#define MAX 100
using namespace std;
void random_shuffle(int arr[]) {
   //function to shuffle the array elements into random positions
   srand(time(NULL));
   for (int i = MAX - 1; i > 0; i--) {
      int j = rand()%(i + 1);
      int temp = arr[i];
      arr[i] = arr[j];
      arr[j] = temp;
   }
}
// Partitioning the array on the basis of values at high as pivot value.
int Partition(int a[], int low, int high) {
   int pivot, index, i;
   index = low;
   pivot = high;
   for(i=low; i < high; i++) {
      // finding index of pivot.
      if(a[i] < a[pivot]) {
         swap(a[i], a[index]);
         index++;
      }
   }
   swap(a[pivot], a[index]);
   return index;
}
int RandomPivotPartition(int a[], int low, int high){
   // Random selection of pivot.
   int pvt, n, temp;
   n = rand();
   pvt = low + n%(high-low+1); // Randomizing the pivot value from sub-array.
   swap(a[high], a[pvt]);
   return Partition(a, low, high);
}
void quick_sort(int arr[], int p, int q) {
   //recursively sort the list
   int pindex;
   if(p < q) {
      pindex = RandomPivotPartition(arr, p, q); //randomly choose pivot
      // Recursively implementing QuickSort.
      quick_sort(arr, p, pindex-1);
    quick_sort(arr, pindex+1, q);
}
}
int main() {
int i;
int arr[MAX];
for (i = 0;i < MAX; i++)
arr[i] = i + 1;
random_shuffle(arr); //To randomize the array
quick_sort(arr, 0, MAX - 1); //sort the elements of array
for (i = 0; i < MAX; i++)
cout << arr[i] << " ";
cout << endl;
return 0;
}

आउटपुट

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

  1. C++ प्रोग्राम जटिलता की कमी के साथ त्वरित क्रम को लागू करने के लिए

    त्वरित छँटाई फूट डालो और जीतो पर आधारित है। इस एल्गोरिदम की औसत समय जटिलता ओ (एन * लॉग (एन)) है लेकिन सबसे खराब स्थिति जटिलता ओ (एन ^ 2) है। सबसे खराब स्थिति की संभावना को कम करने के लिए यहां क्विकसॉर्ट को रैंडमाइजेशन का उपयोग करके लागू किया गया है। एल्गोरिदम विभाजन(int a[], int l,int h) Begin  

  1. सी ++ प्रोग्राम सरणी का उपयोग करके स्टैक को लागू करने के लिए

    स्टैक एक सार डेटा संरचना है जिसमें तत्वों का संग्रह होता है। स्टैक LIFO तंत्र को लागू करता है यानी अंत में धकेले जाने वाले तत्व को पहले पॉप आउट किया जाता है। स्टैक में कुछ सिद्धांत संचालन हैं - पुश - यह स्टैक के शीर्ष पर डेटा मान जोड़ता है। पॉप - यह स्टैक के शीर्ष पर डेटा मान को हटा देता है

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

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