#include< stdio.h>
#define ARR_SIZE(a) (sizeof((a)) / sizeof((a[0])))
int a[] = {1, 23, 32, 0, 2, 5, 23};
void insert_sort(int *a, int n) {
int i, j, temp;
for (i = 1; i < n; i++) {
temp = a[i];
for (j = i - 1; j >= 0 && temp < a[j]; j--) {
a[j + 1] = a[j];
}
a[j + 1] = temp;
}
}
void quick_sort(int *a, size_t left, size_t right){
size_t p = (left + right) / 2;
int pivot = a[p];
size_t i = left, j = right;
for(;i < j;){
while (i < p && a[i] <= pivot)++i;
if (i < p){
a[p] = a[i];
p = i;
}
while (j > p && a[j] >= pivot)--j;
if (j > p){
a[p] = a[j];
p = j;
}
a[p] = pivot;
if (p - left > 1)quick_sort(a, left, p - 1);
if(right - p > 1)quick_sort(a, p + 1, right);
}
}
void display(int n){
for (int i = 0; i < n; ++i)printf("%d\t", a[i]);
printf ("\n");
}
int main(void){
quick_sort(a, 0, ARR_SIZE(a) - 1);
display(ARR_SIZE(a));
}
#define ARR_SIZE(a) (sizeof((a)) / sizeof((a[0])))
int a[] = {1, 23, 32, 0, 2, 5, 23};
void insert_sort(int *a, int n) {
int i, j, temp;
for (i = 1; i < n; i++) {
temp = a[i];
for (j = i - 1; j >= 0 && temp < a[j]; j--) {
a[j + 1] = a[j];
}
a[j + 1] = temp;
}
}
void quick_sort(int *a, size_t left, size_t right){
size_t p = (left + right) / 2;
int pivot = a[p];
size_t i = left, j = right;
for(;i < j;){
while (i < p && a[i] <= pivot)++i;
if (i < p){
a[p] = a[i];
p = i;
}
while (j > p && a[j] >= pivot)--j;
if (j > p){
a[p] = a[j];
p = j;
}
a[p] = pivot;
if (p - left > 1)quick_sort(a, left, p - 1);
if(right - p > 1)quick_sort(a, p + 1, right);
}
}
void display(int n){
for (int i = 0; i < n; ++i)printf("%d\t", a[i]);
printf ("\n");
}
int main(void){
quick_sort(a, 0, ARR_SIZE(a) - 1);
display(ARR_SIZE(a));
}