مرتب‌سازی ساختگی کیست؟ توضیح بده.
در علوم کامپیوتر، مرتب‌سازی ساختگی (که به آن مرتب‌سازی تصادفی، مرتب‌سازی میمونی هم می‌گویند) یک روش غیر مؤثر در الگوریتم‌های مرتب‌سازی محسوب می‌شود. از این مرتب‌سازی برای اهداف آموزشی در تقابل با دیگر روش‌های واقع گرایانه در مرتب‌سازی به کار می‌رود. اگر در مرتب‌سازی دسته‌ای از کارت‌ها از مرتب‌سازی ساختگی استفاده شود، بدین صورت خواهد بود که ابتدا بررسی می‌شود که آیا لیست مرتب است یا خیر. اگر نبود، دوباره ترتیب کارت‌ها را تغییر می‌دهیم، و پردازه قبلی را دوباره اجرا می‌کنیم تا زمانی که به یک لیست مرتب از کارت‌ها برسیم. نام این مرتب‌سازی از واژه bogus به معنای جعلی و ساختگی آمده است.شبه کد.شبه کد الگوریتم این مرتب‌سازی به صورت زیر است:زمان اجرا.زمان اجرای این مرتب‌سازی با فاکتوریل و توابع فرانمایی super-exponential می‌توان بیان کرد. نکته مهم در این است که بدترین حالت ممکن آن می‌تواند زمان اجرای بی‌نهایت داشته باشد.زمان اجرا در بدترین حالت در بی‌نهایت، در حالت میانگین در (O(n!.n و در حالت کمینه در (O(n خواهد بود.مرتب‌سازی ساختگی و کوانتوم.الگوریتم در حالت کلی به صورت زیر است:به طور واضح این الگوریتم کاملاً نابهینه است. هرچند راه حلی برای بهینه‌سازی آن وجود دارد که محاسبه کوانتومی quantum computing نام دارد. به دلیل اینکه بسیاری از فرضیه‌ها در فیزیک کوانتوم، چند جهانی many-universe هستند، یک لیست که به صورت تصادفی مرتب می‌شود، تعداد بی‌نهایتی از جهان‌ها را ایجاد می‌کند. در این حالت، محاسبه کوانتومی مرتب‌سازی ساختگی را در (O(n حل می‌کند. الگوریتم جدید به صورت زیر است:از آنجایی که لیست‌های نامرتب به طور کامل نابود می‌شود، پس بعد از اولین درهم سازی به طور کامل بهینه خواهد شد. بررسی مرتب بودن یک لیست نیازمند N-1 مقایسه است. اگر لیست مرتب نبود، این پیاده‌سازی از جهان‌ها را نابود می‌کنیم؛ و دوباره یک پیاده‌سازی از جهان‌ها را به دست می‌آوریم. چون هر جهان پس از نابودی تنها یک بار شاهد مقایسه‌ها خواهد بود. حال اگر هم فرض کنیم که جهان‌ها در (O(۱ می‌تواند نابود شود، پس برای هر جهان این مرتب‌سازی از (O(n زمان خواهد برد.پیاده‌سازی.در زیر پیاده‌سازی این مرتب‌سازی در دو زبان برنامه‌نویسی ++C و جاوا آمده است.زبان ++C.template&lt;typename ForwardIterator&gt; void bogosort(ForwardIterator begin, ForwardIterator end) typedef std::iterator_traits&lt;ForwardIterator&gt;::value_type value_type;// if we find two adjacent values where the first is greater than the second, the sequence isn't sorted. while (std::adjacent_find(begin, end, std::greater&lt;value_type&gt;()) != end) std::random_shuffle(begin, end);زبان Java.Random random = new Random(); * The main functional algorithm * @param n The array to be sortedpublic void bogoSort(int[] n)//Check to see if the array is in proper order while(!inOrder(n))//If the array is not in order, shuffle it shuffle(n); * Shuffles the array * @param n The array to be shuffledpublic void shuffle(int[] n)//Walk through the array for (int i = 0; i &lt;n.length; i++)//Swap the current position with a random position farther down in the array int swapPosition = random.nextInt(i + 1); int temp = n[i]; n[i] = n[swapPosition]; n[swapPosition] = temp; * Checks to see if the array is in sorted, ascending order * @param n The array to be checked * @return True if the array is in orderpublic boolean inOrder(int[] n)//Walk through the array for (int i = 0; i &lt;n.length - 1; i++)//Checks to see if the two positions being looked at are in proper order if (n[i]&gt; n[i + 1]) return false; return true;