void swap(int *x, int *y){
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
void insert_sort(int *array, int n){
int i;
for (i=1;i<n;i++){
int tmp = array[i];
int j = i-1;
while (j>=0 && tmp < array[j]){
array[j+1] = array[j];
j--;
}
array[j+1] = tmp;
}
}
void select_sort(int *array, int n){
int i,j;
for(i=0;i<n-1;i++){
int min_loc = i;
for (j=i+1;j<n;j++){
if (array[j] < array[min_loc]){
min_loc = j;
}
}
if (min_loc != i){
swap(&array[min_loc],&array[i]);
}
}
}
void bubble_sort(int *array, int n){
int i,j;
for(i=0;i<n-1;i++){
int exch_flag = 0;
for (j=0;j<n-i-1;j++){
if (array[j]>array[j+1]){
swap(&array[j],&array[j+1]);
exch_flag = 1;
}
}
if (!exch_flag){
break;
}
}
}
int _partition(int *array, int left, int right){
int temp = array[left];
while (left < right){
while (left < right && temp < array[right]){
right--;
}
array[left] = array[right];
while (left < right && temp > array[left]){
left++;
}
array[right] = array[left];
}
array[left] = temp;
return left;
}
void _quick_sort(int *array, int left, int right) {
if (left < right){
int mid = _partition(array,left,right);
_quick_sort(array,left,mid);
_quick_sort(array,mid+1,right);
}
}
void quick_sort(int *array, int n){
int left = 0;
int right = n-1;
_quick_sort(array,left,right);
}