Быстрая сортировка (рекурсия) - 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);//правая сторона
}