排序算法代碼 早年練習題 冒泡 歸併 快速




#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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章