long waktumulai;
long waktuakhir;
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
int partition(int arr[], int low, int high) {
int pivot = arr[high]; // pivot
int i = (low - 1); // Index of smaller element
for (int j = low; j <= high - 1; j++) {
// If current element is smaller than the pivot
if (arr[j] < pivot) {
i++; // increment index of smaller element
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
}
void quickSort(int arr[], int low, int high) {
if (low < high) {
// pi is partitioning index, arr[pi] is now at right place
int pi = partition(arr, low, high);
// Separately sort elements before partition and after partition
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
void printArray(int arr[], int size) {
int i;
for (i = 0; i < size; i++) {
Serial.print(arr[i]);
Serial.print(",");
}
Serial.println();
}
void setup() {
Serial.begin(9600);
int arr[] = {64, 25, 12, 22, 11, 13, 14, 161, 671, 537, 4, 56, 79, 80, 15};
int n = sizeof(arr)/sizeof(arr[0]);
Serial.print("Jumlah angka dalam array : ");
Serial.println(n);
Serial.println("Original array:");
printArray(arr, n);
waktumulai = micros();
quickSort(arr, 0, n - 1);
waktuakhir = micros();
Serial.println("Sorted array:");
printArray(arr, n);
Serial.println();
Serial.print("Waktu: ");
Serial.print(waktuakhir-waktumulai);
Serial.println(" micro/s");
}
void loop() {
// nothing here
}