-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquickSortComper.js
124 lines (116 loc) · 3.43 KB
/
quickSortComper.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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
const fs = require('fs');
// fs.readFile('compers\\list.txt', 'utf8', (err, data) => {
// if (err) {
// console.error(err);
// return;
// }
// // mergeSort(data.split('\n'));
// const dac = data.split('\n');
// console.log(quickSort(dac), compers);
// // function test(data, count){
// // if(count<=0) return data;
// // else return test(mergeSort(data), count--);
// // fs.writeFile('JavaScript\\compers\\res.txt', quickSort(dac).join('\n'), 'utf8', (error) => {
// // if (error) {
// // console.error(error);
// // return;
// // }
// // console.log('File written successfully', compers);
// // });
// });
// var compers = 0;
// function quickSort(arr) {
// if (arr.length <= 1) return arr;
// // returns the lowest recution
// compers += arr.length - 1;
// // const pivot = Math.floor(Math.random() * arr.length);
// var pivot2 = Math.floor(arr.length / 2);
// var pivot3 = arr.length - 1;
// var pivot1 = 0;
// let temppivot = [pivot1, pivot2, pivot3];
// temppivot = temppivot.sort()
// const pivot = temppivot[1];
// // randomized pivot
// const left = [];
// const right = [];
// // left for all values smaller then the pivot
// // right for all values larger then the pivot
// for(let i = 0; i < arr.length; i++){
// if(i === pivot) continue;
// // for index on pivot
// if(parseInt(arr[i]) > parseInt(arr[pivot])){
// // pushs the smaller values to left
// left.push(arr[i]);
// }else{
// // if the value is larger or equal to pivot
// right.push(arr[i])
// }
// }
// return [...quickSort(left), arr[pivot], ...quickSort(right)];
// }
// #########################3#############333333333####33##########
function quickSort1(arr){
let temp1 = 0;
let temp2 = 0;
let i = 1;
let j = 1;
let p = 0;
while(j < arr.length){
if(parseInt(arr[j]) > parseInt(arr[p])){
}
}
}
function swap(arr, a, b) {
const temp = arr[b];
arr[b] = arr[a];
arr[a] = temp;
}
function firstMedian(arr, l){
return l;
}
function findMedian(arr, l, r) {
const n = r - l + 1;
let pos = 0;
if (n % 2 === 0) {
pos = Math.floor(n / 2) - 1 + l;
} else {
pos = Math.floor(n / 2) + l;
}
const a = arr[l];
const b = arr[pos];
const c = arr[r];
const maxi = Math.max(a, b, c);
const mini = Math.min(a, b, c);
if (a !== maxi && a !== mini) return l;
else if (b !== maxi && b !== mini) return pos;
else return r;
}
function partition(arr, l, r, pi) {
if (pi !== 0) swap(arr, l, pi);
const pivot = arr[l];
let i = l + 1;
for (let j = l + 1; j <= r; j++) {
if (arr[j] < pivot) {
swap(arr, i, j);
i++;
}
}
swap(arr, l, i - 1);
return i - 1;
}
function quickSort(arr, l, r) {
if (r <= l) return 0;
const position = partition(arr, l, r , findMedian(arr, l, r));// or findMedian
const left = quickSort(arr, l, position - 1);
const right = quickSort(arr, position + 1, r);
return left + right + (r - l);
}
// Read file and perform quicksort
fs.readFile('compers\\list.txt', 'utf8', (err, data) => {
if (err) {
console.error('Error reading file:', err);
return;
}
const arr = data.split('\n').map(Number);
console.log(quickSort(arr, 0, arr.length - 1));
});