С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Сортировки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Построить описание класса (ошибки и вопрос) http://www.cyberforum.ru/cpp-beginners/thread136527.html
Это последнее задание из десяти. Я неспал и бошка совсем не варит. Пожалуйста помогите заочнику, а то сдача уже через 2 часа. Собственно задача. Построить описание класса, содержащего информацию о...
C++ Переставить в обратном порядке элементы массива Дан массив А из N целых чисел и целые значения K и L(1<K<Л<N).Переставить в обратном порядке его элементы,расположенные между А(к) и А(л),включая эти элементы. http://www.cyberforum.ru/cpp-beginners/thread136521.html
fwrite, возвращает ноль, хотя... C++
FILE *h; if ((h = fopen("1.p", "w")) == NULL) {printf("Can't create 1.p.\n");exit(1);} char buff; k+=size; //копирование области данных ...
C++ Контрольная(исправления в коде)
Здравствуйте. Прошу вашей помощи. Задачка состоитв следущем. Описать структуру с именем TRANSAIR, содержащую следующие поля: - название пункта назначения рейса; - номер рейса; - тип самолета....
C++ Полином функция http://www.cyberforum.ru/cpp-beginners/thread136475.html
Вообщем необходима помощ в написании фунуции умножения полиномов вот что есть,#include <fstream> #include <string.h> #include <iostream> #include <locale.h> #include <conio.h> using namespace...
C++ Обработка строк Удалить из строки все сдвоенные, строенные и т.д. символы подробнее

Показать сообщение отдельно
palevo
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 10

Сортировки - C++

27.05.2010, 12:47. Просмотров 323. Ответов 0
Метки (Все метки)

Нужно выполнить сортировку имен в лексикографическом порядке методом Хоора и Шелла.
Собрал вроде обе, но Хоора не хочет работать. Работать с дебагером не очень умею, не могу понять в чем ошибка.
код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include "stdafx.h"
#include "conio.h"
#include <iostream>
#include <iomanip>
#include "locale.h"
#include <fstream>
#include <string>
using namespace std;
void Input(string* a);
void OnScreen(string* a);
void ToFile(string* a);
void shellSort(string* a, long size);
void quickSort(string* a, long N); 
int increment(long inc[], long size);
int pcount=0, scount=0;
long N;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    string* a;
    a=new string[10];
    string* a1;
    a1=new string[10];
    setlocale(LC_ALL, "Russian");
    int pcount=0, scount=0;
    int c;
    do{
        printf("Выберите нужный пункт меню\n1)Считать из файла фамилии и мена студентов\n2)Сортировка Xoopa\n3)Сортировка Шелла\n4)Выход\n");
            cin >> c;
            cout << endl;
        switch(c){
        case 1:
            Input(a);
            break;
        case 2:
            int j;
            cout<<"Сортировка:\n1)do"<<endl;
            cin>>j;
            cout<<"Вывод:\n1)На экран"<<endl;
                if (j==1){
                quickSort(a,10);
                OnScreen(a);
                }
            break;
        case 3:
            cout<<"Сортировка:\n1)do"<<endl;
            cin>>j;
                if (j==1){
                shellSort(a,10);
                OnScreen(a);
                }
            break;
        case 4:
            return 5;
        }
    }while(c!=4);
}
void Input(string* a){
    int j=0;
    ifstream infile("input.txt");
        do{
            infile>>a[j];
            cout << a[j]<<endl;
            j++;
        }while(!infile.eof());
}
void OnScreen(string* a){
    
        for(int t=0; t<10; t++){
            cout << a[t]<<endl;
        }
cout<<"Количество пересылок "<<pcount<<endl;
cout<<"Количество сравнений "<<scount<<endl;
}
 
int increment(long inc[], long size) {
  int p1, p2, p3, s;
 
  p1 = p2 = p3 = 1;
  s = -1;
  do {
    if (++s % 2) {
      inc[s] = 8*p1 - 6*p2 + 1;
    } else {
      inc[s] = 9*p1 - 9*p3 + 1;
      p2 *= 2;
      p3 *= 2;
    }
        p1 *= 2;
  } while(3*inc[s] < size);  
 
  return s > 0 ? --s : 0;
}
void shellSort(string* a,long size){
  long inc, i, j, seq[40];
  int s;
  pcount=0; 
  scount=0;
  s = increment(seq, size);
  while (s >= 0) {
        inc = seq[s--];
    for (i = inc; i < size; i++) {
      string temp = a[i];
      for (j = i-inc; (j >= 0) && (a[j]>temp); j -= inc)
      {a[j+inc] = a[j]; scount++; pcount++;}
      pcount++;
      a[j+inc] = temp;
    }
  }}
 
void quickSort(string* a, long N) {
  long i = 0, j = N;
  string temp, p;
  p = a[ N>>1 ]; 
  do {
    while ( a[i] < p ) i++;
    while ( a[j] > p ) j--;
    scount++;
    if(a[i] == " " || a[j]== " ")continue;
    if(i <= j) {
      temp = a[i]; a[i] = a[j]; a[j] = temp; pcount++;
      i++; j--;
    }
  } while ( i<=j );
  if ( j > 0 ) quickSort(a, j);
  if ( N > i ) quickSort(a+i, N-i);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.