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

Быстрая сортировка четных по номеру элементов - C++

Восстановить пароль Регистрация
 
Aminbek
0 / 0 / 0
Регистрация: 04.12.2011
Сообщений: 3
24.12.2011, 02:23     Быстрая сортировка четных по номеру элементов #1
Помогите пожалуйста, никак с кусортом разобраться не могу...
Выбором и пузырьковая работают, а вот быстрая не хочет.
Нужно отсортировать по убыванию четные по номеру элементы k-ой строки.
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
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
int so=0,sp=0;
void main(){
clrscr();
    int n,k;
void formmat (double **a,int n);
void sort2(double **a, int n, int k);
void sort1(double **a, int n, int k);
void qusort (double **a,int l,int r,int n, int k);
void printmat(double **a,int n);
    printf("‚ўҐ¤ЁвҐ а*§¬Ґа*®бвм ¬*ваЁжл n= ");      scanf("%d",&n);
    printf("‚ўҐ¤ЁвҐ *®¬Ґа б®авЁа㥬®© бва®ЄЁ k= "); scanf("%d",&k);k--;
        double **a,**b,**c;int i,j,so1,sp1;
            a=(double**)malloc(n*sizeof(double));
                 for (i=0;i<n;i++)
                a[i]=(double*)malloc(n*sizeof(double));
formmat(a,n);
    printf("\n ?б室**п ¬*ваЁж*:\n");
                     printmat(a,n);
                printf("\n ‚롮஬ min\n"); sort1(a, n, k);so1=so; sp1=sp;
            //sort2(a, n);
                 printf(" Џа®ўҐа®Є %d ЋЎ¬Ґ*®ў %d \n",sp1,so1);
                     printmat(a,n);
formmat(a,n); sp=0; so=0;
    printf("\n Џг§л४\n");
                     sort2(a, n, k);
                         printf(" Џа®ўҐа®Є %d ЋЎ¬Ґ*®ў %d \n",sp,so);
                    printmat(a,n);
formmat(a,n); so=0; sp=0;
    printf("\n ђҐЄгаҐ*в**п б®авЁа®ўЄ*\n");
         for(i=0;i<n;i+=2)
                         qusort(a,0,n-1,n,k);
                    printf(" Џа®ўҐа®Є %d ЋЎ¬Ґ*®ў %d \n",sp,so);
                                     printmat(a,n);
    for (i=0;i<n;i++) free(a[i]);
    free(a);
    getchar();          getchar();
}//----------------------------------------------
double Mul(int i, int j) {
    double P=1;
    int k;
    for (k=i; k<=j; k++)
        P=P*k;
    return P;
}
void printmat(double **a,int n){//---ЏҐз*вм ¬*ваЁжл
        int i,j;
        for (i=0;i<n;i++){
            for (j=0;j<n;j++)
                printf("%8.2f ",a[i][j]);
                printf("\n");
        }
}//------------------------------------------------
void formmat (double **a,int n){
        int i,j; double c;
        for (i=1;i<=n;i++)
            for (j=1;j<=n;j++)
            a[i-1][j-1]=Mul(1,j)/Mul(i,n);
}//------------------------------------------------
void sort1(double **a,int n,int k) {   //Џа®бв®© ўлЎ®а
int i,j,l;
double buf;
    for (i=1;i<n-1;i+=2){
        l=i;
        for (j=i+2;j<n;j+=2){
            sp++;
            if (a[k][j]>a[k][l]) l=j;
            }
        buf=a[k][i]; a[k][i]=a[k][l]; a[k][l]=buf; so++;
        } }
//-------------------------------------------------
void sort2(double **a, int n, int k){     //Џг§л४
    int i,j,b,l;
    double buf;
    l=n-1;
    for (i = 0; i < n; i++)
        {sp++;
        for (j=1; j < n-i-2; j+=2)
            if (a[k][j] < a[k][j+2])
                {so++;
                    buf = a[k][j];
                    a[k][j] = a[k][j+2];
                    a[k][j+2] = buf;
                }
        }
}
//---------------------------------------------------
 
void qusort (double **a,int l,int r,int n, int k){
int i=0,j=0;
double s,buf;
        i=l; j=r; s=a[k][(l+r)/2+1];
        do {
                while (a[k][i]>s&&i<=r) {i++; sp++;}
                while (a[k][j]<s&&j>=l) {j--; sp++;}
                if (i<=j){
                 //if(i%2==1&&j%2==1){
                 buf=a[k][i]; a[k][i]=a[k][j]; a[k][j]=buf; i+=2; j-=2; so++;
                 //}
                }
        }
        while (i<=j);
            if (j>l) qusort (a,l,j,n,k);
            if (i<r) qusort (a,i,r,n,k);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2011, 02:23     Быстрая сортировка четных по номеру элементов
Посмотрите здесь:

C++ Сортировка четных/нечетных элементов массива
C/C++ FAQ :: Быстрая сортировка (сортировка Хоара) C++
Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива C++
Быстрая сортировка C++
Быстрая сортировка (сортировка Хоара) для связных списков C++
C++ Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях
Быстрая сортировка (сортировка методом Хоара) C++
C++ Сортировка Хоара / Быстрая сортировка

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

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

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