code

code
 avatar
unknown
abc
3 years ago
2.7 kB
5
Indexable
using System;
using System.Diagnostics;

namespace DaThuc
{
    class Program
    {
        static void Main()
        {
            Random r = new Random();
            int n = int.Parse(Console.ReadLine());
            int[] a = new int[n];
            for (int i = 0; i < n; i++)
            {
                a[i] = r.Next(-10, 11);
            }
            //Console.Write("Nhap k: ");
            //int k = int.Parse(Console.ReadLine());
            Stopwatch st1 = new Stopwatch();
            st1.Start();
            quicksort1(a, 0, n - 1);
            for (int i = 0; i < a.Length; i++)
            {
                Console.Write(a[i] + " ");
            }
            Console.WriteLine();
            st1.Stop();
            Stopwatch st2 = new Stopwatch();
            st2.Start();
            quicksort2(a, 0, n - 1);
            for (int i = 0; i < a.Length; i++)
            {
                Console.Write(a[i] + " ");
            }
            Console.WriteLine();
            //Tinh2(k,a.Clone() as int[]);
            st2.Stop();
            Stopwatch st3 = new Stopwatch();
            st3.Start();
            //Console.WriteLine("Gia tri da thuc C3 = " + Tinh3(n, x));
            st3.Stop();
            Console.WriteLine("Thoi Gian chay lan luot cua ba cach tren la: C1: {0}  C2: {1}  C3: {2}", st1.Elapsed, st2.Elapsed, st3.Elapsed);
        }
        static void swap(ref int a,ref int b)
        {
            int temp = a;
            a = b;
            b = temp;
        }
        static int partition(int[] arr, int l, int h)
        {
            int x = arr[h];
            int i = l - 1;
            for (int j = l; j <= h - 1; j++)
            {
                if (arr[j] <= x)
                {
                    i++;
                    swap(ref arr[i],ref arr[j]);
                }
            }
            swap(ref arr[i + 1],ref arr[h]);
            return (i + 1);
        }
        static void quicksort1(int[] arr, int l, int h)
        {
            if (l < h)
            {
                int p = partition(arr, l, h);
                quicksort1(arr, l, p - 1);
                quicksort1(arr, p + 1, h);
            }
        }
        static void quicksort2(int[] arr, int l, int h)
        {
            if (l < h)
            {
                int pivot = partition(arr, l, h);

                if (pivot > 1)
                {
                    partition(arr, l, pivot - 1);
                }
                if (pivot + 1 < h)
                {
                    partition(arr, pivot + 1, h);
                }
            }

        }
    }
}
Editor is loading...