-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbubblesort.js
110 lines (94 loc) · 3.01 KB
/
bubblesort.js
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
var ludzie = require("./ludzie-3.json");
// tutaj mamy wczytane dane do tablicy ludzie
// w takiej strukturze
//name:"Mieczysław",
//surename:"Nowicki",
//age:94,
//gender:"Male","Female"
//hight:166
var m = 0;
var k = 0;
var niska_kreska;
var najwyzsza_kreska;
var tabImiona = [];
// UWAGA! nowe zmienne nazywamy według konwencji:
// pierwsza litera oznacza typ - z tych poniżej:
// ----------------------
// integer - całkowita
// string - tekst
// long - całkowita
// bool - logiczna (true/false)
// float - rzeczywista
// char - pojedynyczy znak
// real - rzeczywista
// object - obiekt
// listy
// tablice
//--------------------
// reszta z dużej litery oznacza nazwę zmiennej - opisową
// np: iIterator - zmienna typu int, iterator w pętli
////////////////////////////////////////////////////////////////////////////////////
//
//
//
//
//
// zabawy z sortowaniem
//
// TODO:
// 1. sortowanie z polskimi znakami
// 2. sortowanie po kilku kryteriach - nazwisko, potem imię
//
//
////////////////////////////////////////////////////////////////////////////////////
function BubbleSort() {
// wyświetlamy pierwsze 10 osób wg wzrostu
console.log(`wzrost (pierwsze 10)`);
for (let iIter1 = 0; iIter1 < 10; iIter1++) {
console.log(ludzie[iIter1].hight);
}
//sortowanie bąbelkowe
var bBrakZmian = true;
var iIlePrzejsc = 0;
console.log(`rozpoczynam sortowanie bąbelkowe`);
while (bBrakZmian) {
bBrakZmian = false;
for (let iIter1 = 0; iIter1 < ludzie.length - 1; iIter1++) {
//console.log(ludzie[iIter1].hight);
var oCzlowiek;
// tutaj jest główne porównanie sortowania - może być według:
// imion alfabetycznie - if (ludzie[iIter1].name>ludzie[iIter1+1].name){
// wzrostu - if (ludzie[iIter1].hight>ludzie[iIter1+1].hight){
// wieku - if (ludzie[iIter1].age>ludzie[iIter1+1].age){
// albo nazwiska - alfabetycznie
// uwaga - porównanie stringów nmie działa na polskich znaczkach - źle sortuje
// bo w znakach ASCII często literki "polskie" są dużo dalej niż literki angielskie
// a = 97
// b = 98
// ą = 177
// aby sortowało poprawnie - trzba napisać własną funkcję porównującą
//if (ludzie[iIter1].surename>ludzie[iIter1+1].surename){
if (
ludzie[iIter1].surename + ludzie[iIter1].name >
ludzie[iIter1 + 1].surename + ludzie[iIter1 + 1].name
) {
// zamieniamy miejscami dwa obiekty w tablicy ludzie
oCzlowiek = ludzie[iIter1];
ludzie[iIter1] = ludzie[iIter1 + 1];
ludzie[iIter1 + 1] = oCzlowiek;
bBrakZmian = true;
}
// zliczamy efektywność algorytmu
iIlePrzejsc++;
}
if (iIlePrzejsc % 1000 == 0) console.log(`BS iter: ${iIlePrzejsc}`);
}
// wyświetlamy efektywność sortowania
console.log(`przejsc sortowania bąbelkowego: ${iIlePrzejsc}`);
for (let iIter1 = 0; iIter1 < 100; iIter1++) {
console.log(
`nazwisko:${ludzie[iIter1].surename} imie: ${ludzie[iIter1].name}`
);
}
}
BubbleSort();