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

сортировка (метод прямого выбора) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Элеонора
 Аватар для Элеонора
7 / 2 / 1
Регистрация: 20.09.2010
Сообщений: 39
17.09.2011, 22:21     сортировка (метод прямого выбора) #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
#include <stdio.h>
#include <conio.h>
#include <vcl.h>
#define N 10
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
void FillRand(int a[], int n);
int CheckSum(int a[], int n);
int RunNumber(int a[], int n);
void FillInc(int a[], int n);
void SelectSort(int a[], int n, int * m, int * c);
void FillDec(int a[], int n);
void PrintMas(int a[], int n);
 
int main(int argc, char* argv[])
{
int a[N+1];
int m,c;
 
 
FillInc(a, N);
PrintMas(a,N);
printf("CheckSum:%d\n",CheckSum(a,N));
printf("\n");
FillDec(a, N);
PrintMas(a,N);
printf("CheckSum:%d\n\n",CheckSum(a,N));
FillRand(a,N);
PrintMas(a,N);
printf("CheckSum:%d\n",CheckSum(a,N));
printf("\n");
SelectSort(a,N,&m,&c);
printf("M:%d C:%d T:%d\n",m,c,m+c);
printf("\n");
PrintMas(a,N);
printf("CheckSum:%d\n",CheckSum(a,N));
printf("Series:%d\n",RunNumber(a,N));
getch();
return 0;
}
void FillRand(int a[], int n){
int i;
randomize();
for(i=1;i<=n;i++)
a[i]=random(100);
}
 void FillDec(int a[], int n){ int i;
   for(i=1; i<=n; i++)
    a[i]=n-i;
    //printf(" %i ", a[i]);
    }
 
 void FillInc(int a[] , int n){
  int i;
  for( i=1; i<=n; i++)
  a[i]=i-1;
  //printf(" %i ", a[i]);
  }
 
int CheckSum(int a[], int n){
int i,s;
for (i=1,s=0;i<=n;i++)
s+=a[i];
return(s);
}
 
int RunNumber(int a[], int n){
int i,s;
for (i=1,s=0;i<n;i++){
if (a[i-1]>a[i]) s++;}
return(s);
}
 
void SelectSort(int a[], int n, int * m, int * c){
int i,j,min,t;
for (i=*c=*m=1;i<n-1;i++){
min=i;
for (j=i+1;j<=n;j++){
if (a[j]<a[min])
min=j;
(*c)++;
}
 if(i!=min){
t=a[i];a[i]=a[min];a[min]=t;(*m)+=3; }
}
}
 
void PrintMas(int a[], int n){
int i;
for (i=1;i<=n;i++)
printf("%3d",a[i]);
printf("\n");
}
//---------------------
//---------------------------------------------------------------------------
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2011, 22:21     сортировка (метод прямого выбора)
Посмотрите здесь:

Метод прямого выбора C++
Алгоритмы сортировки: прямые, улучшенные (Сортировка с помощью прямого включения (метод простых вставок)) C++
C++ Сортировка массива слов методом прямого выбора
C++ Сортировка выбором (метод прямого выбора). Ошибка в задаче
C++ Сортировка прямого включения
Сортировка методом прямого выбора C++
Сортировка методом прямого включения C++
Сортировка массива методом прямого выбора C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nxnx
Формучанин
361 / 292 / 16
Регистрация: 02.11.2010
Сообщений: 1,226
17.09.2011, 22:53     сортировка (метод прямого выбора) #2
C
1
 (*m)+=3;
может изза этого?

Добавлено через 3 минуты
+
C
1
for (i=*c=*m=1;i<n-1;i++)
с какого перепугу *m должно быть 1?
получается что *m минимум будет 1.
Индексация массивов кстати с 0 начинается.
Yandex
Объявления
17.09.2011, 22:53     сортировка (метод прямого выбора)
Ответ Создать тему
Опции темы

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