Реализовать алгоритм быстрой сортировки с разбиением на 3 элемента, - PullRequest
3 голосов
/ 08 апреля 2011

Как преобразовать этот алгоритм быстрой сортировки в разбиение 3, 5,7,9 и 11 элементов?

#include"stdafx.h"
#include<iostream>
using namespace std;
#include <stdio.h>
#include <stdlib.h>
#define size 50
void swap(int *x,int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}

int partition(int i,int j )
{
return((i+j) /2);
}

void quicksort(int list[],int m,int n)
{
int key,i,j,k;
if( m < n)
{
k = partition(m,n);
swap(&list[m],&list[k]);
key = list[m];
i = m+1;
j = n;
while(i <= j)
{
while((i <= n) && (list[i] <= key))
i++;
while((j >= m) && (list[j] > key))
j--;
if( i < j)
swap(&list[i],&list[j]);
}

swap(&list[m],&list[j]);
quicksort(list,m,j-1);
quicksort(list,j+1,n);
}
}
void printlist(int list[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%d\t",list[i]);
}

void main()
{
int n,i;
int list[size];


printf("How many numbers do you want to enter");
scanf("%d",&n);
printf("Enter the numbers you want to sort");
for(i=0;i<n;i++)
{
scanf("%d",&list[i]);
}


printf("The list before sorting is:\n");
printlist(list,n);
quicksort(list,0,n-1);
printf("The list after sorting using quicksort algorithm:\n");
printlist(list,n);
system("pause");
}

Ответы [ 2 ]

5 голосов
/ 08 апреля 2011

Я думаю, что у вашего учителя C ++ просто плохой выбор формулировок.«разделение на 3 элемента» почти наверняка означает: выберите элемент pivot, выбрав медиану первого, среднего и последнего элементов - это наиболее распространенный метод кодирования и имеет хорошие свойства, когда массив уже отсортирован.

Экстраполировать это определение для 5, 7, 9, 11.

0 голосов
/ 08 апреля 2011

Разделение является неотъемлемой частью алгоритма быстрой сортировки. Просмотрите алгоритм , чтобы понять, что такое разбиение. Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...