快速排序实例

来源:互联网 发布:js求log以10为底 编辑:程序博客网 时间:2024/05/19 11:47

#include "stdafx.h"
#include <malloc.h>
#define cutoff (3)
int array[] = {34,8,64,51,32,21};

void insert_sort(int array[],int size)
{
 int temp,p;
 printf("insert sort example...\n");
 for(p =1;p<size;p++)
 {
  temp = array[p];
  for(int j = p;j>0&&array[j-1]>temp;j--)
  {
   array[j] = array[j-1];
  }
  array[j] = temp;
  print_array(array,size);
 }
}

void print_array(int array[],int size)
{
 for(int i = 0;i<size;i++)
  printf("  %d",array[i]);
 printf("\n");
}

void swap(int *x,int *y)
{
 int temp = *x;
 *x = *y;
 *y = temp;
}
int Median(int array[],int left,int right)
{
 int center = (left+right)/2;
 if(array[left]>array[center])
  swap(&array[left],&array[center]);
 if(array[left]>array[right])
  swap(&array[left],&array[right]);
 if(array[center] >array[right])
  swap(&array[center],&array[right]);
 swap(&array[center],&array[right-1]);
    return array[right-1];
}
void Qsort(int A[],int left,int right)
{
 int i,j,pivot;
 if(left+cutoff<=right)
 { 
  pivot = Median(A,left,right);
  i = left;
  j = right-1;
  while(1)
  {
  while(A[++i] < pivot) ;
  while(A[--j] > pivot) ;
  if(i<j)
  {
  swap(&A[i],&A[j]);
  }
  else
  {
   printf("pivot = %d\n",pivot);
            print_array(A,right-left+1);
   break;
  }
  }
  swap(&A[i],&A[right-1]);
  Qsort(A,left,i-1);
  Qsort(A,i+1,right);
 } 
 else
 insert_sort(A+left,right-left+1);

}
void Quicksort(int A[],int N)
{
 Qsort(A,0,N-1);
}

原创粉丝点击