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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Элеонора
7 / 2 / 1
Регистрация: 20.09.2010
Сообщений: 39
#1

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

17.09.2011, 22:21. Просмотров 1857. Ответов 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");
}
//---------------------
//---------------------------------------------------------------------------
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2011, 22:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос сортировка (метод прямого выбора) (C++):

Сортировка выбором (метод прямого выбора). Ошибка в задаче - C++
Привет. У меня есть программка решение на задачку &quot;Первые десять элементов массива М(30) отсортировать в порядке возрастания, а остальные в...

Метод прямого выбора - C++
Задача простая Используя в качестве массива набор из 8 букв своих фамилии, имени, отчества, определить на каждом шаге в методе прямого...

Сортировка методом прямого выбора - C++
Помогите пожалуйста! Есть код, но в конце сортировка сбивается. есть массив: A={1, 6, 9, 7, 2, 0, 4, 3, 5, 8} после выполнения моего...

Сортировка массива методом прямого выбора - C++
Объясните пожалуйста как работает эта программа. Задание: Массив из 5 целых чисел заполнить с клавиатуры. Произвести сортировку...

сортировка чисел методом прямого выбора и пузырька - C++
Надо отсортировать цисла массива с рандомом что бы положительное число росло, а отрицательное число уменьшалось. 1)Метод прямого выбора ...

Сортировка массива слов методом прямого выбора - C++
Помогите пожалуйста сделать сортировку массива слов методом прямого выбора. То есть у меня есть массив слов, и мне сначала для сортировки...

1
nxnx
Формучанин
362 / 293 / 16
Регистрация: 02.11.2010
Сообщений: 1,234
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 начинается.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2011, 22:53
Привет! Вот еще темы с ответами:

Сортировка четных элементов масссива с помощью прямого выбора - C++
сортировка с помощью прямого выбора Четные элементы в одномерном массиве

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

Сортировка прямого включения - C++
Не переставляется первый элемент массива, как исправить? void Insertion(int *mas, int *n) { for (int i = 0; i &lt; n+1; ++i) { ...

Не сходится теория и практика метод Шелла и метод простого выбора - C++
Здравствуйте! Помогите пожулуйста найти ошибке в коде, Я уже не знаю где ее искать. У меня метод простого выбора работает по показателям...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru