Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2010, 04:46   #1
maryan.vetrov
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 75
По умолчанию Проблема с алгоритмом быстрой сортировки

Доброго времени суток! Попытался реализовать алгоритм быстрой сортировки одномерного массива на С, он работает, но как-то не до конца. Подскажите чего не хватает, что я упустил! Ниже выкладываю свой код.Заранее блпгодарен!
Код:
#include<stdio.h>
#define SIZE 12
int partition(int [], int, int);
void quicksort(int [], int, int);

main()
{
        int A[SIZE]={13,19,9,5,12,8,7,4,21,2,6,11};
        int p=0, r=11,i;

        for(i=0; i<=SIZE-1; i++)
                printf("%d ", A[i]);
        printf("\n");

        quicksort(A,p,r);

        for(i=0; i<=SIZE-1; i++)
                printf("%d ", A[i]);

        printf("\n");


        return 0;
}

void quicksort(int A[], int p, int r)

        int q;

        if(p<r){
        q=partition(A,p,r);

        quicksort(A,p, (q-1));

        quicksort(A,(q+1),r);
        }
}
int partition(int A[], int p, int r)
{
        int i,x,j,hold,hold2,k;

        x=A[r];
        i=p-1;

        for(j=p; j<=r; j++)
                if(A[j]<=x){
                        i=i+1;
                        hold=A[i];
                        A[i]=A[j];
                        A[j]=hold;

                        hold2=A[i+1];
                        A[i+1]=A[r];
                        A[r]=hold2;
                }
        return i;
}

Последний раз редактировалось Stilet; 31.08.2010 в 07:44.
maryan.vetrov вне форума Ответить с цитированием
Старый 31.08.2010, 08:10   #2
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

Код:
int comp(const int *s1, const int *s2)
{
	return *s1 - *s2;
}
void swap(int *s1, int *s2)
{
	int temp;

	temp = *s1;
	*s1 = *s2;
	*s2 = temp;
}
void qsort(int *arr, int num, int (*comp_p) (const int *, const int *))
{
	int *l, *r, i, j, m;

	if (num < 2)
		return;
	l = r = arr;
	m = num / 2; //середина массива - опорный элемент
	for (i = 0; i < m; i++)
		for (j = num; j >= m; j--) {
			if (comp_p(l+i, r+j) > 0) // сортируем массив помещая меньшие элементы в первый большие во второй
				swap(l+i, r+j);
	}
	qsort(arr+m, num-m, comp_p); // сортируем половинку от середины до конца
	qsort(arr, m, comp_p); // сортируем от середины до конца
}

int main()
{
	enum {SIZE = 100};
	int n[SIZE], i;

	srand(time(NULL));
	for (i = 0; i < SIZE; i++)
		n[i] = rand() % 100;
	qsort(n, SIZE-1, comp);
	return 0;
}
include <Qt>

Последний раз редактировалось sever-42; 31.08.2010 в 08:19.
sever-42 вне форума Ответить с цитированием
Старый 31.08.2010, 18:56   #3
maryan.vetrov
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 75
По умолчанию RE: sever-42

Спасибо, за ваш ответ, и за ваш код! Но, мне интересно чего нехватает в моем коде, а вы мне предложили совершенно иной подход, причем я сомневаюсь в оптимальности вашего алгоритма. На сколько я понял, это рекурсивный вариант пузырьковой сортировки, с разбиение массива на подмосивы, путем определения индекса серединного элемента.
maryan.vetrov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка двумерного массива по столбцам методом быстрой сортировки( Хоара) и пирамидальной. tworc22 Помощь студентам 3 28.10.2011 23:05
Вопросы насчёт быстрой сортировки(С++) Stopafilm Помощь студентам 2 01.08.2010 10:43
Метод быстрой сортировки Nord18 Паскаль, Turbo Pascal, PascalABC.NET 1 05.06.2010 11:24
Метод быстрой сортировки Хоора Pascal Бармалей Помощь студентам 8 18.11.2009 21:21
Список с быстрой перемоткой(Delphi) drumerbaker Помощь студентам 6 13.06.2009 23:20