Monday, December 26, 2016

Bab 17. Soal & Penyelesaian C++


REKURSI





Soal & Penyelesaian
1.       Tulislah sebuah program C++ untuk merealisasikan rekursi dalam menampilkan argumen fungsi secara vertikal.
Penyelesaian:

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
//rekursiArgumenVertikal.cpp
//Mendemonstrasikan fungsi rekursi tulis_vertikal.
#include <iostream>
#include <conio.h>
using namespace std;

void tulis_vertikal(int n);
//Prakondisi: n >= 0.
//Pascakondisi: Angka n ditulis secara vertikal
//dengan tiap dijit pada baris terpisah.

int main( )
{
    cout << "tulis_vertikal(3):" << endl;
    tulis_vertikal(3);

    cout << "tulis_vertikal(12345):" << endl;
    tulis_vertikal(12345);

    cout << "tulis_vertikal(123456789):" << endl;
    tulis_vertikal(123456789);

    getch();
    return 0;
}

void tulis_vertikal(int n)
{
    if (n < 10)
    {
        cout << n << endl;
    }
    else //n dua atau lebih dijit
    {
        tulis_vertikal(n / 10);
        cout << (n % 10) << endl;
    }
}

tulis_vertikal(3):
3
tulis_vertikal(12345):
1
2
3
4
5
tulis_vertikal(123456789):
1
2
3
4
5
6
7
8
9

2.       Tulislah sebuah program C++ untuk operasi pemangkatan menggunakan rekursi.
Penyelesaian:

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
//rekursiPemangkatan.cpp
//Mendemonstrasikan fungsi rekursif pemangkatan.
#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;

int pangkat(int x, int n);
//Prakondisi: n >= 0.
//Menghasilkan x yang dipangkat dengan n.

int main( )
{
    for (int n = 0; n < 7; n++)
        cout << "3 dipangkat dengan " << n
             << " adalah " << pangkat(3, n) << endl;
    getch();
    return 0;
}

int pangkat(int x, int n)
{
    if (n < 0)
    {
        cout << "Argumen ilegal.\n";
        exit(1);
     }

    if (n > 0)
        return (pangkat(x, n - 1)*x );
    else // n == 0
        return (1);
}

3 dipangkat dengan 0 adalah 1
3 dipangkat dengan 1 adalah 3
3 dipangkat dengan 2 adalah 9
3 dipangkat dengan 3 adalah 27
3 dipangkat dengan 4 adalah 81
3 dipangkat dengan 5 adalah 243
3 dipangkat dengan 6 adalah 729


3.       Tulislah sebuah program C++ untuk pencarian biner menggunakan rekursi.
Penyelesaian:

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
//rekursiPencarianBiner.cpp
//Mendemonstrasikan fungsi rekursif pencarian biner.
#include <iostream>
#include <conio.h>
using namespace std;
const int UKURAN_ARRAY = 10;

void pencarianBiner(const int a[], int awal, int akhir,
int kunci, bool& ditemukan, int& lokasi);

int main( )
{
    int a[UKURAN_ARRAY];
    const int indeks_akhir = UKURAN_ARRAY - 1;
    int kunci, lokasi;
    bool ditemukan;

    cout << "Masukkan angka yang ingin dicari: ";
    cin >> kunci;
    pencarianBiner(a, 0, indeks_akhir, kunci, ditemukan, lokasi);

    if (ditemukan)
        cout << kunci << " ada pada indeks "
             << lokasi << endl;
    else
        cout << kunci << " tidak ada dalam array." << endl;

    getch();
    return 0;
}

void pencarianBiner(const int a[], int awal, int akhir,
int kunci, bool& ditemukan, int& lokasi)
{
    int tengah;
    if (awal > akhir)
    {
        ditemukan = false;
    }
    else
    {
        tengah = (awal + akhir)/2;

        if (kunci == a[tengah])
        {
            ditemukan = true;
            lokasi = tengah;
        }
       
        else if (kunci < a[tengah])
        {
            pencarianBiner(a, awal, tengah - 1, kunci, ditemukan, lokasi);
        }

        else if (kunci > a[tengah])
        {
            pencarianBiner(a, tengah + 1, akhir, kunci, ditemukan, lokasi);
        }
    }
}

Masukkan angka yang ingin dicari: 25
25 tidak ada dalam array.

4.       Tulislah sebuah program C++ untuk merealisasikan program anagram menggunakan rekursi.
Penyelesaian:

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
//rekursiAnagram.cpp
//menciptakan anagram
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;

class Kata
{
   private:
       int ukuran; //panjang kata masukan
       int kounter;
       string strKerja;
       void rotasi(int);
       void tampilKata();

    public:
        Kata(string); //konstruktor
        void anagram(int);
};

//konstruktor
Kata::Kata(string strMasukan) : strKerja(strMasukan), kounter(0)
{ //menginisialisasi strKerja
    ukuran = strMasukan.length(); //jumlah karakter
}

void Kata::anagram(int ukuranBaru)
{
    if(ukuranBaru == 1) //jika terlalu kecil,
        return; //keluar

       for(int j=0; j<ukuranBaru; j++) //untuk tiap posisi,
    {
        anagram(ukuranBaru-1); //sisa anagram
        if(ukuranBaru==2)
            tampilKata();

        rotasi(ukuranBaru);
    }
}

//merotasi kiri semua karakter
void Kata::rotasi(int ukuranBaru)
{
    int j;
    int posisi = ukuran - ukuranBaru;
    char temp = strKerja[posisi]; //menyimpan karakter pertama

    for(j=posisi+1; j<ukuran; j++) //menggeser ke kiri
        strKerja[j-1] = strKerja[j];
   
    strKerja[j-1] = temp;
}

void Kata::tampilKata()
{
    if(kounter < 99)
        cout << " ";
    if(kounter < 9)
        cout << " ";

    cout << ++kounter << " ";
    cout << strKerja << " ";

    if(kounter%6 == 0)
        cout << endl;
}

int main()
{
    string masukan;
    int pjg;

    cout << "Masukkan sebuah kata: ";
    cin >> masukan;

    pjg = masukan.length();
    Kata kata(masukan);
    kata.anagram(pjg);

    getch();
    return 0;
} //akhir main()

Masukkan sebuah kata: sinar
  1 sinar   2 sinra   3 siarn   4 sianr   5 sirna   6 siran
  7 snari   8 snair   9 snria  10 snrai  11 sniar  12 snira
 13 sarin  14 sarni  15 sainr  16 sairn  17 sanri  18 sanir
 19 srina  20 srian  21 srnai  22 srnia  23 srain  24 srani
 25 inars  26 inasr  27 inrsa  28 inras  29 insar  30 insra
 31 iarsn  32 iarns  33 iasnr  34 iasrn  35 ianrs  36 iansr
 37 irsna  38 irsan  39 irnas  40 irnsa  41 irasn  42 irans
 43 isnar  44 isnra  45 isarn  46 isanr  47 isrna  48 isran
 49 narsi  50 naris  51 nasir  52 nasri  53 nairs  54 naisr
 55 nrsia  56 nrsai  57 nrias  58 nrisa  59 nrasi  60 nrais
 61 nsiar  62 nsira  63 nsari  64 nsair  65 nsria  66 nsrai
 67 niars  68 niasr  69 nirsa  70 niras  71 nisar  72 nisra
 73 arsin  74 arsni  75 arins  76 arisn  77 arnsi  78 arnis
 79 asinr  80 asirn  81 asnri  82 asnir  83 asrin  84 asrni
 85 ainrs  86 ainsr  87 airsn  88 airns  89 aisnr  90 aisrn
 91 anrsi  92 anris  93 ansir  94 ansri  95 anirs  96 anisr
 97 rsina  98 rsian  99 rsnai 100 rsnia 101 rsain 102 rsani
103 rinas 104 rinsa 105 riasn 106 rians 107 risna 108 risan
109 rnasi 110 rnais 111 rnsia 112 rnsai 113 rnias 114 rnisa
115 rasin 116 rasni 117 rains 118 raisn 119 ransi 120 ranis

5.       Tulislah sebuah program C++ untuk pencarian biner menggunakan rekursi yang lebih sistematis.
Penyelesaian:

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
//rekursiPencarianBinerLengkap.cpp
//Mendemonstrasikan pencarian biner rekursif
#include <iostream>
#include <vector>
#include <conio.h>
using namespace std;

class ArrayTerurut
{
    private:
        vector<double> v; //vector v
        int jumElemen; //jumlah item data

    public:
        ArrayTerurut(int max) //konstruktor
        {
            v.resize(max); //ukuran array
            jumElemen = 0;
        }

        int bacaUkuran() //menghasilkan jumlah elemen
        { return jumElemen; }

        int cari(double kunciPencarian)
        {
            return cariRekursif(kunciPencarian, 0, jumElemen-1);
        }

        int cariRekursif(double kunciPencarian, int batasBawah, int batasAtas)
        {
            int posSkrg;
            posSkrg = (batasBawah + batasAtas ) / 2;

            if(v[posSkrg]==kunciPencarian)
                return posSkrg; //ditemukan
            else if(batasBawah > batasAtas)
                return jumElemen; //tidak ditemukan
            else //membagi rentang
            {
                if(v[posSkrg] < kunciPencarian) //ada di potongan atas
                    return cariRekursif(kunciPencarian, posSkrg+1, batasAtas);
                else //ada di potongan bawah
                    return cariRekursif(kunciPencarian, batasBawah, posSkrg-1);
            } //akhir else
        } //akhir cariRekursif()

        void sisip(double nilai) //menempatkan elemen ke dalam array
        {
            int j;
            for(j=0; j<jumElemen; j++)
                if(v[j] > nilai) //(pencarian linier)
                    break;

            for(int k=jumElemen; k>j; k--)
                v[k] = v[k-1];

                     v[j] = nilai;
            jumElemen++;
        } //akhir sisip()

        void tampil()
        {
            for(int j=0; j<jumElemen; j++)
                cout << v[j] << " ";
            cout << endl;
        }
}; //akhir kelas ArrayTerurut

int main()
{
    int ukuranMaks = 100; //ukuran array
    ArrayTerurut arr(ukuranMaks); //array terurut

    arr.sisip(72); //menyisipkan item-item
    arr.sisip(90);
    arr.sisip(45);
    arr.sisip(126);
    arr.sisip(54);
    arr.sisip(99);
    arr.sisip(144);
    arr.sisip(27);
    arr.sisip(135);
    arr.sisip(81);
    arr.sisip(18);
    arr.sisip(108);
    arr.sisip(9);
    arr.sisip(117);
    arr.sisip(63);
    arr.sisip(36);

    arr.tampil(); //menampilkan array
    int kunciPencarian = 27; //mencari item dengan nilai 27
    if( arr.cari(kunciPencarian) != arr.bacaUkuran() )
        cout << "Menemukan " << kunciPencarian << endl;
    else
        cout << "Tidak ditemukan " << kunciPencarian << endl;

    getch();
    return 0;
} //akhir main()

9 18 27 36 45 54 63 72 81 90 99 108 117 126 135 144
Menemukan 27

6.       Tulislah sebuah program C++ untuk merealisasikan pencarian Merge menggunakan rekursi.
Penyelesaian:

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
//rekursiPengurutanMerge.cpp
//Mendemonstrasikan pengurutan Merge rekursif.
#include <iostream>
#include <vector>
#include <conio.h>
using namespace std;

class DArray
{
    private:
        vector<double>(vektor); //vektor double
        int jumElemen; //jumlah item data
        void pengurutanMergeRekursif(vector<double>, int, int);
        void merge(vector<double>, int, int, int);

    public:
        DArray(int maks) : jumElemen(0) //konstruktor
        {
            vektor.resize(maks); //ukuran vector
        }

        void sisip(double nilai) //menempatkan elemen ke dalam array
        {
            vektor[jumElemen] = nilai; //menyisipkan
            jumElemen++; //menginkremen ukuran
        }

        void tampil() //menampilkan isi array
        {
            for(int j=0; j<jumElemen; j++) //untuk tiap elemen,
                cout << vektor[j] << " "; //menampilkan
            cout << endl;
        }

        void pengurutanMerge() //dipanggil oleh main()
        {
            vector<double>(vektorKerja);
            vektorKerja.resize(jumElemen);
            pengurutanMergeRekursif(vektorKerja, 0, jumElemen-1);
        }
}; //akhir kelas DArray

void DArray::pengurutanMergeRekursif(vector<double> vektorKerja,
int batasBawah, int batasAtas)
{
    if(batasBawah == batasAtas)
        return;
    else
    { //mencari titik-tengah
        int tengah = (batasBawah+batasAtas) / 2;

        //mengurutkan potongan bawah
        pengurutanMergeRekursif(vektorKerja, batasBawah, tengah);

        //mengurutkan potongan atas
        pengurutanMergeRekursif(vektorKerja, tengah+1, batasAtas);

        //menggabungkan keduanya
        merge(vektorKerja, batasBawah, tengah+1, batasAtas);
    } //akhir else
} //akhir pengurutanMergeRekursif()

void DArray::merge(vector<double> vektorKerja, int ptrBawah,
int ptrAtas, int batasAtas)
{
    int j = 0;
    int batasBawah = ptrBawah;
    int tengah = ptrAtas-1;
    int n = batasAtas-batasBawah+1;

    while(ptrBawah <= tengah && ptrAtas <= batasAtas)
        if( vektor[ptrBawah] < vektor[ptrAtas] )
            vektorKerja[j++] = vektor[ptrBawah++];
        else
            vektorKerja[j++] = vektor[ptrAtas++];

    while(ptrBawah <= tengah)
        vektorKerja[j++] = vektor[ptrBawah++];

    while(ptrAtas <= batasAtas)
        vektorKerja[j++] = vektor[ptrAtas++];

    for(j=0; j<n; j++)
        vektor[batasBawah+j] = vektorKerja[j];
} //akhir merge()

int main()
{
    const int ukuranMaks = 100; //menciptakan array
    DArray arr(ukuranMaks);

    arr.sisip(64); //menyisipkan item-item
    arr.sisip(21);
    arr.sisip(33);
    arr.sisip(70);
    arr.sisip(12);
    arr.sisip(85);
    arr.sisip(44);
    arr.sisip(3);
    arr.sisip(99);
    arr.sisip(0);
    arr.sisip(108);
    arr.sisip(36);

    arr.tampil(); //menampilkan item-item

    arr.pengurutanMerge(); //pengurutan-merge atas array
    arr.tampil(); //menampilkan item-item kembali

    getch();
    return 0;
} //akhir main()

64 21 33 70 12 85 44 3 99 0 108 36
0 3 12 21 33 36 44 64 70 85 99 108

7.       Tulislah sebuah program C++ untuk merealisasikan pencarian Quick menggunakan rekursi.
Penyelesaian:

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
//rekursiPengurutanQuick.cpp
//Mendemonstrasikan versi sederhana dari pengurutan Quick
#include <iostream>
#include<vector>
#include<cstdlib>
#include<ctime>
#include<conio.h>
using namespace std;

class ArrayQuick
{
    private:
        vector<double>(vektor); //vector double
        int jumElemen; //jumlah item data

    public:
        ArrayQuick(int maks) : jumElemen(0) //konstruktor
        {
            vektor.resize(maks); //ukuran vector
        }

        void sisip(double nilai) //menempatkan elemen ke dalam array
        {
            vektor[jumElemen] = nilai; //menyisipkan
            jumElemen++; //menginkremen ukuran
        }

        void tampil() //menampilkan isi array
        {
            cout << "A= ";
            for(int j=0; j<jumElemen; j++) //untuk tiap elemen,
                cout << vektor[j] << " "; //menampilkan
            cout << endl;
        }

        void pengurutanQuick() //mengurutkan array
        {
            pengurutanQuickRek(0, jumElemen-1);
        }

        void pengurutanQuickRek(int kiri, int kanan) //pengurutan Quick rekursif
        {
            if(kanan-kiri <= 0) //jika ukuran <= 1,
                return; // telah terurut
            else //ukuran 2 atau lebih besar
            {
                double pivot = vektor[kanan];
                //mempartisi rentang
                int partisi = partisiIt(kiri, kanan, pivot);
                pengurutanQuickRek(kiri, partisi-1);
                pengurutanQuickRek(partisi+1, kanan);
        }
} //akhir pengurutanQuickRek()

int partisiIt(int kiri, int kanan, double pivot)
{
    int tandaKiri = kiri-1;
    int tandaKanan = kanan;

    while(true)
    { //mencari item lebih besar
        while( vektor[++tandaKiri] < pivot )
          ; // (tidak ada operasi)

              //mencari item lebih kecil
        while(tandaKanan > 0 && vektor[--tandaKanan] > pivot)
            ; // (tidak ada operasi)

        if(tandaKiri >= tandaKanan)
            break; // partisi selesai

        else
            tukar(tandaKiri, tandaKanan);
    } //akhir while(true)

    tukar(tandaKiri, kanan);
    return tandaKiri;
} //akhir partisiIt()

void tukar(int dex1, int dex2) //menukar dua elemen
{
    double temp = vektor[dex1]; //A ke dalam temp
    vektor[dex1] = vektor[dex2]; //B ke dalam A
    vektor[dex2] = temp; //temp ke dalam B
} //akhir tukar
}; //akhir kelas ArrayQuick

int main()
{
    time_t waktuA;
    int ukuranMaks = 16; //ukuran array

    ArrayQuick arr(ukuranMaks); //menciptakan array
    srand( static_cast<unsigned>(time(&waktuA)) ); //menanam tunas acak

    for(int j=0; j<ukuranMaks; j++) //mengisi array dengan
    { //angka-angka acak
        double n = rand() % 99;
        arr.sisip(n);
    }

    arr.tampil(); //menampilkan item-item
    arr.pengurutanQuick(); //melakukan pengurutanQuick
    arr.tampil(); //menampilkan kembali

    getch();
    return 0;
} //akhir main()

A= 95 55 89 40 2 97 69 18 93 3 10 1 9 40 36 67
A= 1 2 3 9 10 18 36 40 40 55 67 69 89 93 95 97

8.       Tulislah sebuah program C++ untuk merealisasikan pencarian Quick yang lebih baik menggunakan rekursi.
Penyelesaian:

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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//rekursiPengurutanQuickBaik.cpp
//Mendemonstrasikan pengurutan Quick dengan partisi median-tiga
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include<conio.h>
using namespace std;

class ArrayQuick
{
    private:
        vector<double>(vektor); //vector double
        int jumElemen; //jumlah item data

    public:
        ArrayQuick(int maks) : jumElemen(0) //konstruktor
        {
            vektor.resize(maks); //ukuran vector
        }

        void sisip(double nilai) //menempatkan elemen ke dalam array
        {
            vektor[jumElemen] = nilai; //menyisipkan
            jumElemen++; //menginkremen ukuran
        }

        void tampil() //menampilkan isi array
        {
            cout << "A= ";
            for(int j=0; j<jumElemen; j++) //untuk tiap elemen,
                cout << vektor[j] << " "; //menampilkan
            cout << endl;
        }

        void pengurutanQuick() //mengurutkan array
        {
            pengurutanQuickRek(0, jumElemen-1);
        }

        void pengurutanQuickRek(int kiri, int kanan)
        {
            int ukuran = kanan-kiri+1;
            if(ukuran <= 3) //pengurutan manual jika ukuran kecil
                pengurutanManual(kiri, kanan);
            else //pengurutanQuick jika ukuran besar
            {
                double median = median3(kiri, kanan);
                int partisi = partisiIt(kiri, kanan, median);
                pengurutanQuickRek(kiri, partisi-1);
                pengurutanQuickRek(partisi+1, kanan);
            }
        } //akhir pengurutanQuickRek()

        double median3(int kiri, int kanan)
        {
            int tengah = (kiri+kanan)/2;
            //mengurutkan kiri & tengah
            if( vektor[kiri] > vektor[tengah] )
                tukar(kiri, tengah);

                     //mengurutkan kiri & kanan
            if( vektor[kiri] > vektor[kanan] )
                tukar(kiri, kanan);

                     //mengurutkan tengah & kanan
            if( vektor[tengah] > vektor[kanan] )
                tukar(tengah, kanan);

            tukar(tengah, kanan-1); //menempatkan pivot di kanan
            return vektor[kanan-1]; //menghasilkan nilai median
        } //akhir median3()

        void tukar(int dex1, int dex2) //menukar dua elemen
        {
            double temp = vektor[dex1]; //A ke dalam temp
            vektor[dex1] = vektor[dex2]; //B ke dalam A
            vektor[dex2] = temp; //temp ke dalam B
        } //akhir tukar

        int partisiIt(int kiri, int kanan, double pivot)
        {
            int tandaKiri = kiri-1;
            int tandaKanan = kanan;

            while(true)
            { //mencari item lebih besar
                while( vektor[++tandaKiri] < pivot )
                ; // (tidak ada operasi)

                //mencari item lebih kecil
                while(tandaKanan > 0 && vektor[--tandaKanan] > pivot)
                ; // (tidak ada operasi)

                if(tandaKiri >= tandaKanan)
                    break; // partisi selesai

                else
                    tukar(tandaKiri, tandaKanan);
            } //akhir while(true)

            tukar(tandaKiri, kanan);
            return tandaKiri;
        } //akhir partisiIt()

        void pengurutanManual(int kiri, int kanan)
        {
            int ukuran = kanan-kiri+1;
            if(ukuran <= 1)
                return; //tidak diperlukan pengurutan
            if(ukuran == 2)
            {
                if( vektor[kiri] > vektor[kanan] )
                    tukar(kiri, kanan);
                    return;
                }

                else
                {
                     if( vektor[kiri] > vektor[kanan-1] )
                         tukar(kiri, kanan-1); //kiri, tengah
                     if( vektor[kiri] > vektor[kanan] )
                         tukar(kiri, kanan); //kiri, kanan
                     if( vektor[kanan-1] > vektor[kanan] )
                         tukar(kanan-1, kanan); //tengah, kanan
                }
              } //akhir pengurutanManual()
}; //akhir kelas ArrayIns

int main()
{
    time_t waktuA;
    int ukuranMaks = 16; //ukuran array
      
    ArrayQuick arr(ukuranMaks); //menciptakan array
    srand( static_cast<unsigned>(time(&waktuA)) ); //tunas acak

    for(int j=0; j<ukuranMaks; j++) //mengisi array dengan
    { //angka-angka acak
       double n = rand() % 99;
       arr.sisip(n);
    }

    arr.tampil(); //menampilkan array
    arr.pengurutanQuick(); //melakukan pengurutanQuick
    arr.tampil(); //menampilkan array

    getch();
    return 0;
} //akhir main()

A= 37 7 45 51 30 76 27 44 3 9 63 72 13 91 66 4
A= 3 4 13 7 9 27 37 30 44 45 51 63 66 76 72 91



No comments:

Post a Comment