09.05.2011, 23:05. Просмотров 1072. Ответов 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
| #include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
bool compare1(double a,double b)
{ return a<b;
}
bool compare2(double a,double b)
{ return a>b;
}
bool compareSin(double a,double b)
{return sin(a)<sin(b);}
double sort(double * inArr,int len,bool (*pfun)(double,double))
{ double swap;
for (int i=0;i<len; i++)
{for (int j=0; j<len-i; j++)
{ if (pfun(inArr[j],inArr[j+1])==true)
{
swap=inArr[j];
inArr[j]=inArr[j+1];
inArr[j+1]=swap;
}
}
}
for(int i=0;i<len; i++)
cout<<inArr[i];
return 0;
}
int main()
{double *inArr=new double(10);
int len;
cout<<"enter LENGTH\n";
cin>>len;
cout<<"enter MASSIV\n";
for(int i=0;i<len;i++)
{ cout<<"inArr["<<i<<"]=";
cin>>inArr[i];}
sort(inArr,len,compare1);
printf("\n");
sort(inArr,len,compare2);
printf("\n");
sort(inArr,len,compareSin);
getch();
return 0;
} |
|
Добавлено через 1 час 6 минут
оказалось,что swap-это стандартная функция
но всё равно ошибка не в этом
нужно уместить возможность сортировки по убыванию и возрастанию,и понять,что делать для сортировки по синусам
Добавлено через 39 минут
работает,если использовать сортировку
C++ |
1
2
3
4
5
6
7
| while (len>0){
len--;
int i=0;
while (i<len) {
if ( pfun(inArr[i], inArr[i+1]) )
swap (inArr[i],inArr[i+1]);
i++; } } |
|
но желательнее,чтобы программа правильно работала с использованием метода пузырька(