Ads Home1

C# Program - Metode Pengurutan Quicksort

http://www.xcodeplus.net/2018/01/csharp-program-quicksort.html


Kode Program Quiksort

Sebelumnya kita telah membahas mengenai Merge Sort, pada postingan kali ini saya akan memberikan source code program implementasi pengurutan dengan metode Quicksort. Metode Quicksort ini ditemukan oleh Tony Hoare. Performa rata-rata pengurutan O(n log n) untuk mengurutkan n item.

Algoritma ini juga dikenal sebagai Partition-Exchange Sort atau disebut sebagai Sorting Pergantian Pembagi. Pada kasus terburuknya, algoritma ini membuat perbandingan O(n2), malaupun kejadian seperti ini sangat langka. Quicksort sering lebih cepat dalam praktiknya daripada algoritma urut gabung dan heapshort. Dan juga, urutan dan referensi lokalisasi memori quicksort bekerja lebih baik dengan menggunakan cache CPU, jadi keseluruhan sorting dapat dilakukan hanya dengan ruang tambahan O(log n).
Quicksort merupakan sorting pembanding dan pada implementasi efisien tidak merupakan algoritma sorting yang stabil.


Berikut di bawah ini kode program yang akan mengimplementasikan metode pengurutan Quicksort:

/************************************
 * Author Name : Muhammad Hari      *
 * Author URI  : www.xcodeplus.net  *
 ************************************/

using System;
using System.Collections;

namespace ConsoleApplicationQUICKSORT
{
    class Program
    {
        static ArrayList data;
        static int numElements;

     
        private static void swap(ArrayList data, int x, int y)
        {
            int temp;
            temp = Convert.ToInt16(data[x]);
            data[x] = data[y];
            data[y] = temp;

        }

     
        private static int partition
        (ArrayList data, int left, int right)
        
        // Syarat : left <= right
        // Hasil : data[left] ditempatkan 
        // di lokasi yang sesuai.
        {
            while (true)
            {
                while (left < right &&
                    Convert.ToInt16(data[left]) < Convert.ToInt16(data[right])) right--;
                if (left < right) swap(data, left + 1, right);
                else return left;
                
                while (left < right &&
                    Convert.ToInt16(data[left]) < Convert.ToInt16(data[right])) left++;
                if (left < right) swap(data, left, right--);
                else return right;
            }
        }

        private static void DisplayElements()
        {
            for (int i = 0; i < numElements; i++)
            {
                Console.Write(" " + data[i] + " ");
            }
            Console.WriteLine();
        }

        public static void quickSort(ArrayList data, int n)
        {
            quickSortRecursive(data, 0, n - 1);
        }

        private static void quickSortRecursive(ArrayList data, int left, int right)
        // Syarat : left <= right
        // Hasil akhir : data[left..right] dalam keadaan 
        // urut naik (ascending)
        {
            int pivot; 
            if (left >= right) return;
           
            pivot = partition(data, left, right);
            
            quickSortRecursive(data, left, pivot - 1);
            
            quickSortRecursive(data, pivot + 1, right);

            DisplayElements();
            
        }

        static void Main(string[] args)
        {
            Console.Write
            ("Berapa elemen array yang akan diurutkan ?  ");
            numElements = int.Parse(Console.ReadLine());
            data = new ArrayList(numElements);
            
            Random mRandom = new Random(100);
            
            for (int i = 0; i < numElements; i++)
                data.Add((int)(mRandom.NextDouble() * 100));
            Console.WriteLine("\nBilangan awal : ");

            DisplayElements();

            Console.WriteLine();
            
            quickSort(data, numElements);

            Console.WriteLine("\nBilangan terurut : \n");

            DisplayElements();

            Console.ReadLine();
        }
    }
}

Berapa elemen array yang akan diurutkan ?  10

Bilangan awal :
 96  15  66  90  35  94  71  61  34  14

 14  15  34  35  66  61  71  90  94  96
 14  15  34  35  66  61  71  90  94  96
 14  15  34  35  66  61  71  90  94  96
 14  15  34  35  66  61  71  90  94  96
 14  15  34  35  66  61  71  90  94  96
 14  15  34  35  66  61  71  90  94  96
 14  15  34  35  66  61  71  90  94  96
 14  15  34  35  66  61  71  90  94  96

Bilangan terurut :

 14  15  34  35  66  61  71  90  94  96


Catatan:
Untuk pembahasan mengenai konsep dari pengurutan Quicksort saya akan membahasnya pada postingan yang terpisah, karena akan sangat kompleks jika dilakukan bersamaan. So, jangan segan untuk kembali lagi kesini karna saya akan selalu memperbarui postingan saya setiap harinya.

Anda juga dapat mengimplementasikan kode program di atas di bahasa pemrograman lainnya seperti C++ dan Java yang memang pada dasarnya untuk penulisan syntaksnya tidaklah berbeda dengan bahasa pemrograman C# Anda hanya perlu merubah beberapa bagian seperti perintah input/output, implementasi class, implementasi penggunaan ArrayList dan sebagainya.



C# (dibaca: C Sharp) merupakan bahasa pemrograman generasi baru yang mewah, kaya akan fitur, dan dapat digunakan untuk membuat beraneka raga program/aplikasi di berbagai bidang. C# mendukung beberapa paradigma pemrograman: imperatif, deklaratif, fungsional, serta pemrograman berorientasi objek. C# termasuk dalam keluarga C, dan fitur-fiturnya banyak diadopsi dari Java dan C++. C# menggunakan pustaka (library) yang terdapat dalam .NET Framework, kelengkapan di dalam pustaka .NET Framework menjadikan proses pengembangan program/aplikasi menggunakan C# relatif lebih mudah dan cepat jika dibandingkan dengan C++ dan Java.


No comments:

Kami menerima masukan dari anda jika memang ada pembahasan yang keliru dan kami sangat senang jika anda dapat berkontribusi untuk menyempurnakan postingan kami. Anda dapat mengirimkan email ke : hari18.muhammad@gmail.com

Jika postingan ini bermanfaat jangan lupa share postingan ini. Kami sangat merekomendasikan untuk anda yang membutuhkan informasi tentang computer stuff silakan subscribe blog kami dapatkan informasi terupdate dari kami secara gratiss. Terimakasih!

Powered by Blogger.