#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//quick sort
void swap(int *px, int *py)
{
int tmp;
tmp = *px;
*px = *py;
*py = tmp;
}
int split(int a[],int low, int high)
{
int i=low, j=high,k=0, key=a[low];
while(i < j)
{
while( i<j && a[j] >= key )
{ j--; }
swap(&a[i],&a[j]);
while( i<j && a[i] <= key )
{ i++; }
swap(&a[i],&a[j]);
}
return j;
}
void quick_sort(int a[],int low, int high)
{
if( low >= high ) return ;
int base = split(a,low,high);
quick_sort(a, low, base-1);
quick_sort(a, base+1,high);
}
// merge sort
int merge(int array[],int aux[], int low, int mid, int high)
{
int k=0, i=low, j = mid + 1;
while( i<=mid && j<=high )
{
if( array[i] < array[j] )
{ aux[k++] = array[i++]; }
else
{ aux[k++] = array[j++]; }
}
while( i <= mid )
{ aux[k++] = array[i++]; }
while( j <= high )
{ aux[k++] = array[j++]; }
//printf("k=%d, low=%d, high=%d\n", k,low,high);
i=0;
while( i < k )
{ array[low++] = aux[i++]; }
}
int merge_sort(int array[], int low, int high)
{
if( low >= high )
{ return -1; }
int mid = low + (high - low)/2;
int *aux = malloc((high-low)*4);
merge_sort(array, low, mid);
merge_sort(array, mid+1, high);
merge( array, aux, low, mid, high);
}
// bubble sort
int bubble_sort(int *ptr_int, int len)
{
if(NULL==ptr_int, 0==len)
{ return -1; }
int tmp=0;
int i=0,j=0;
for( i=0; i<len-1; i++ )
{
for( j=0; j<len-1-i; j++ )
{
if( ptr_int[j] > ptr_int[j+1] )
{
tmp = ptr_int[j];
ptr_int[j] = ptr_int[j+1];
ptr_int[j+1] = tmp;
}
}
}
return 0;
}
int main(void)
{
int data_input[100];
int i_ret = 0,i=0;
int len = sizeof(data_input)/sizeof(data_input[0]);
memset(data_input, 0x00, sizeof(data_input));
printf("please input n integrators, n<100 \n");
for( i=0; i<len; i++ )
{
printf("\ndata_input[%d]=",i);
scanf("%d", &data_input[i]);
if( data_input[i] == 100 )
break;
}
printf("above is before sort\n");
// i_ret = bubble_sort(data_input, len);
// merge_sort(data_input,0, len-1);
quick_sort(data_input,0, len-1);
for( i=0; i<len; i++ )
{
printf("\n%d ", data_input[i] );
}
printf("above is after sort\n");
printf("len=%d, last = %d i_ret=%d\n", len, data_input[len-1],i_ret);
return 0;
}