Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.221.85.33] |
|
Сообщ.
#1
,
|
|
|
Кинти, пожалуйста, исходник сортировки строк (можно только из латиницы) методом рампределения (радиксным) или ссылку. Спасибо.
|
Сообщ.
#2
,
|
|
|
Это опять я. Вот я тут написал что-то, но оно неправильно работает. В чем здесь причина?
#include <stdio.h> #include <memory.h> #include <string.h> #include <conio.h> #define N 30 char *array[20], *sorted_array[20]; int count = 0; void sort_strs(); void main() { clrscr(); puts("Enter some string (empty string to finish):"); char s[N], *ps; while (1) { gets(s); if (!*s) break; s[ strlen(s) ] = '\0'; ps = new char [strlen(s) + 1 ]; strcpy(ps, s); array[ count++ ] = ps; } printf("You have entered \%d strings", count); sort_strs(); puts("Sorted array is"); int i; for (i = 0; i < count; i++) puts(sorted_array[i]); getch(); for (i = 0; i < count; i++) delete []array[ i ]; } void sort_strs() { int distr[256]; int index[256]; for (int k = 0; k < N; k++) { memset(&distr, 0, sizeof(distr)); memset(&index, 0, sizeof(index)); *index = 0; int i; for (i = 0; i < count; i++) distr[ array[ i ][ k ] ]++; for (i = 1; i < 255; i++) index[ i ] = index[ i - 1] + distr[ i - 1 ]; for (i = 0; i < count; i++) sorted_array[ index[ array[ i ][ k ] ] ] = array[ i ]; } } Например, если вводить bcc bab baa abc caa, то программа сортирует их несовсем правильно. По первой букве - все хорошо, но дальше уже не то. |