2015年1月1日 星期四

quicksort 不穩定排序

#include <stdio.h>
#include <stdlib.h>

void swap(int *a , int *b)
{
 int tmp = *b;
 *b = *a;
 *a = tmp;
 //printf("swap = %d_%d\n",*a,*b);
}

int quicksort(int *ArrayPtr , int left , int right)
{
 int Pivot , i ,j;
 
 if(left >= right)
 {
  return -1;
 }
 
 Pivot = *(ArrayPtr + left);
 i = left + 1;
 j = right;
 
 while(1)
 {
  while( i <= right)
  {
   if(*(ArrayPtr + i) > Pivot){
    break;
   }
   i++;
  }
  while(j > left)
  {
   if(*(ArrayPtr + j) < Pivot)
   {
    break;
   }
   j--;
  }
  if( i > j)
   break;
  swap(ArrayPtr + i , ArrayPtr + j);
 }
 swap(ArrayPtr + left , ArrayPtr +j);
 quicksort(ArrayPtr , left , j-1);
 quicksort(ArrayPtr , j+1  , right);
 
 return 0;
}

int main(void)
{
 int data[10]={3,11,9,1,2,8,4,5,1} ,i;
 
 quicksort(data, 0, 9 - 1);
 
 for(i = 0 ;i <9 ;i++){
  printf("%d_",data[i]);
 }
 
 return 0;
}
 

code: https://drive.google.com/file/d/0B8hm-I2M8BD7cHJldHZIZXNZS28/view?usp=sharing

沒有留言:

張貼留言