Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
palevo
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 10
27.05.2010, 12:47     Сортировки #1
Нужно выполнить сортировку имен в лексикографическом порядке методом Хоора и Шелла.
Собрал вроде обе, но Хоора не хочет работать. Работать с дебагером не очень умею, не могу понять в чем ошибка.
код:
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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2010, 12:47     Сортировки
Посмотрите здесь:

C++ Сортировки
Сортировки? C++
C++ Составить блок – схемы для шейкер- сортировки и сортировки Шелла
C++ Составить программы для пузырьковой сортировки и сортировки посредством выбора с применением оператора while
Си++, Сортировки C++
C++ Сделать так, чтобы после сортировки вектора указатель показывал на тот же элемент, что и до сортировки
C++ Напишите функцию сортировки, похожую на функцию которая использовалась для сортировки массивов, с той разницей, что ее а
C++ Сортировки С++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 06:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru