Быстрая сортировка (рекурсия) - C#

Узнай цену своей работы

Формулировка задачи:

Ребят, помогите! Основным элементом быстрой сортировки явлеятся опорный элемент, и собственно с ним то и проблема( Надо чтобы в консоль помимо массива "до" и "после" выводился ещё и опорный элемент, и всякий раз когда он меняет своё значение, надо чтобы оно выводилось в консоль. В общем чтобы в консоли были записанны все опорные элементы) как то так. С этим проблема, помогите пж. вот код программы. Массив берёртся из файла.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace Lab_9
{
    class Program
    {
 
         public static void Qs(int first, int last, int[] s_arr)
            {
                int c;
                int i = first;
                int j = last;
                int temp = s_arr[(last-first) / 2 + first];
                while (i<=j)
                {
                    while ((i <= last) && (s_arr[i] < temp)) ++i;
                    while ((j >= first) && (s_arr[j] > temp)) --j;
                    if (i <= j)
                        {
                            c = s_arr[i];
                            s_arr[i] = s_arr[j];
                            s_arr[j] = c;
                            Console.WriteLine(temp);
                            i++; j--;
                        }
                }
                while (i <= j);
                if (j > first) Qs(first, j, s_arr);
                if (i < last) Qs(i, last, s_arr);
            }
 
        static void Main(string[] args)
        {
            Console.WriteLine("Быстрая сортировка");
            int i, l, u, n = 15;
            l = 0;
            u = 14;
            int[] A = new int[n];
            StreamReader f = new StreamReader("F:\\САОД\\Новая папка\\ЛАБА9\\ЛАБА9\\1.txt");
            for (i = 0; i < n; i++)
            {
                A[i] = Convert.ToInt32(f.ReadLine());
                Console.Write(A[i] + " ");
            }
            Console.WriteLine("\n");
 
            Qs(l, u, A);
 
            StreamWriter fl = new StreamWriter("F:\\САОД\\Новая папка\\ЛАБА9\\ЛАБА9\\2.txt");
            for (i = 0; i < n; i++)
            {
                fl.WriteLine(Convert.ToString(A[i]));
                Console.Write(" ");
                Console.Write(A[i] + " ");
            }
            fl.Close();
            Console.ReadKey();
        }
    }
}

Решение задачи: «Быстрая сортировка (рекурсия)»

textual
Листинг программы
void sort::quickSort(int M,int N)
{
    int i=M,j=N,x=0;
    int p=num[(N+M)>>1];/*поразрядный сдивг вправо на 1 эл-нт-означает сдвиг битов на 1 позицию вправо (деля на 2 в двоичной
                  сис-ме мы "откидываем" последнюю цифру в дроб. часть, которая в данном случае "вырезается")*/
 
    do//разделение массива по эл-ту p
    {
        for(;num[i]<p;i++){}
        for(;num[j]>p;j--){}
 
        if (i<=j)
        {
            if (i<j)
            {
            x=num[j];
            num[j]=num[i];
            num[i]=x;
            }
            i++;
            j--;
        }
    }
    while(i<=j);
 
    if(i<N) quickSort(i,N);//левая сторона
    if(j>M) quickSort(M,j);//правая сторона
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5