Быстрая Сортировка(сортировка Хаора) С++

  • Автор темы LastHunter
  • Дата начала
Статус
Закрыто для дальнейших ответов.
L

LastHunter

Гость
#1
Здравствуйте. Учусь с++. Попытался написать прогу по этому заданию: Напишите функцию, которая сортирует массив с использованием рекурсии.
Но не работает, ошибку найти не могу, подскажите в чем проблема?
C++:
#include "stdafx.h"
#include <iostream> 
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <stdio.h>
using namespace std;
//метод половинного деления
void sortHoor(int A[], int L,int R) 
{
int i=L, j=R; 
int x=A[(L+R)/2]; 
while( i<=j )
{
while (A[i]<x)
i++;
while (A[j]>x)
j--;
if (i<=j)
{
int t = A[i];
A[i] = A[j];
A[j] = t;
i++;
j--; 
} 
}
if(L<j)
sortHoor(A, L, j);
if(i<R)
sortHoor(A, i, R); 
} 

//функция ввода, здесь проблем нет
int vvod(int *A, int n)
{
int v=0;
printf("kak budet zadavatsa massiv: 1)random, 2)sam zadam \t");
scanf("%d", &v);
if (v==1)
{
for (int i=0;i<n;i++)
A[i]=rand()%21-10;
}
if (v==2)
{
for (int i=0;i<n;i++)
scanf("%d", &A[i]);
}
if(v!=1 && v!=2)
printf("error");
return 0;
}

int main()
{
int n=0, L=0, R=0;
printf ("vvedite razmer massiva: n\t");
scanf ("%d", &n);
int* A=(int* )malloc(n* sizeof(int ));
vvod (A,n);
for (int i=0;i<n;i++)
{
printf("%d\t", A[i]);
}
L=A[0];
R=A[n-1];
sortHoor (A,L,R);
for (int i=0;i<n;i++)
printf("%d\t", A[i]);
system("pause");
return 0;
}
 

lazybiz

Well-Known Member
03.11.2010
1 339
0
#2
Ты не те параметры функции sortHoor передаешь. Нужно передавать: массив, первый элемент, последний элемент+1.
Т.е. у тебя должно быть: sortHoor( A, 0, n )
Работает ли сама sortHoor, не проверял.
 
L

LastHunter

Гость
#3
точно, все исправил, все работает =) sortHoor(A,0,n-1)
 
Статус
Закрыто для дальнейших ответов.