#include <iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
clock_t start,finish;
void createCounters(char *, long *, long );
void radixPass(short , long , char *, char *, long *);
void radixSort(char* &, long );
void printMass(char [], char );
main()
{
char a[] ="qwertyuiopasdfghjklzqwertyuiopasdfghjklzqwertyuiopasdfghjklzqwertyuiopasdfgh
jklz";
printMass(a, sizeof(a)/sizeof(char));
start=clock();
for(int i=0;i<24000;i++){
radixSort(a, sizeof(a)/sizeof(char));
finish=clock(); }
printMass(a, sizeof(a)/sizeof(char));
cin.get();
return 0;
}
void createCounters(char *data, long *counters, long N)
{
memset( counters, 0, 256*sizeof(int)*sizeof(long) );
char *bp = (char*)data;
char *dataEnd = (char*)(data + N);
short i;
while ( bp != dataEnd )
{
for (i=0; i<sizeof(char);i++)
counters[256*i + *bp++]++;
}
}
void radixPass (short Offset, long N, char *source, int *dest, long *count)
{
char *sp;
long s, c, i, *cp;
char *bp;
s = 0;
cp = count;
for (i = 256; i > 0; --i, ++cp)
{
c = *cp;
*cp = s;
s += c;
}
bp = (char *)source + Offset;
sp = source;
for (i = N; i > 0; --i, bp += sizeof(char) , ++sp)
{
cp = count + *bp;
dest[*cp] = *sp;
++(*cp);
}
}
void radixSort (char* &in, long N)
{
int *out = new int[N];
int *temp = new int[N];
long *counters = new long[sizeof(int)*256], *count;
createCounters(in, counters, N);
for (short i=0; i<sizeof(char); i++)
{
count = counters + 256*i;
if ( count[0] == N ) continue;
radixPass (i, N, in, out, count);
for(int i = 0;i < N; ++i)
{
temp=in;
in=out;
out=temp;
}
}
delete out;
delete counters;
delete temp;
}
void printMass(char A[], char f)
{
cout << "\nMass:";
for(int i = 0; i < f; i++)
cout << ' ' << A;
cout << '\n';
cout <<"time"<<(finish-start);
}
Если сегодня не поможете завтра отчислят...
Привет! Я уже создавал темку вот найти немогу, суть проблемы, есть MSD сортировка, сортирует буквы по алфавиту, а как сделать что сортировала слова по алфавиту????? Я очень очень прошу помочь
Код:
template <class T >
inline void swap (T array[], int pos1, int pos2) {
T temp;
temp=array[pos1];
array[pos1]=array[pos2];
array[pos2]=temp;
}
template <class T>
inline void print(T array[],int size) {
for (int i=0;i<size;++i) cout<<array<<" ";
}
template <class T>
inline void bubble_sort(T array[], int size) {
int i,j;
for (i=0;i<size-1;++i)
for (j=size-1;j>i;--j)
if (array[j-1]>array[j]) swap(array,j-1,j);
}
int main()
{
int k;
int array[]={4,2,6,5,8,9,1,3,7};
print(array,9);
bubble_sort(array,9);
print(array,9);
cout<<endl;
cin>>k;
return 0;
}
inline void swap (T array[], int pos1, int pos2) {
T temp;
temp=array[pos1];
array[pos1]=array[pos2];
array[pos2]=temp;
}
template <class T>
inline void print(T array[],int size) {
for (int i=0;i<size;++i) cout<<array<<" ";
}
template <class T>
inline void bubble_sort(T array[], int size) {
int i,j;
for (i=0;i<size-1;++i)
for (j=size-1;j>i;--j)
if (array[j-1]>array[j]) swap(array,j-1,j);
}
int main()
{
int k;
int array[]={4,2,6,5,8,9,1,3,7};
print(array,9);
bubble_sort(array,9);
print(array,9);
cout<<endl;
cin>>k;
return 0;
}
А как сортировать не числа а слова по алфавиту???
Цитата: BroKeR
Решение в лоб-делаешь структуру в которой храниться в одном поле первая буква слова, а во втором слово. Сортируешь по первому полю, выводишь второе.
Читаем внимательно.
Слуш ты можешь дописать я могу заплатить, просто мне очень надо а времени самому писать нет? (Должна быть именно msd сортировка)!
если не отчислили еще :(