「クイックソートアルゴリズム」問題の分割アルゴリズム
2415 ワード
/*
:<> -[ ]
:
:2002 09 18 (21:43:00-22:03:00)
“ ”
*/
#include "stdio.h"
#include "stdlib.h"
//:============================“ ” ===========================
/*
:2002 09 18 (21:43:00-22:03:00)
“ ”
:
。
:
。 , ,
。
, 1 。
, , , , p[middle],
temp = p[middle]( );
, p[middle] ;
, i,j ;
, i = j ;
, array[i] = temp( tmep array[i])。
*/
#define MAXN 20
void Carve_up(int array[],int number,int *m)
{
int i,j,k,middle,temp;
i = 0;
j = number - 1;
k = (i + j) / 2;
// i,j,k
if(array[i] >= array[j] && array[j] >= array[k])
middle = j; //Array[j]
else if(array[i] >= array[k] && array[k] >= array[j])
middle = k; //Array[k]
else
middle = i; //Array[i]
temp = array[middle];
array[middle] = array[i];
while(i != j)
{
while(i < j && array[j] >= temp)
j --; //j , array[j] < temp
if(i < j)
{
array[i] = array[j];
i ++ ;
while(i < j && array[i] <= temp)
i ++ ; //i , array[i] > temp
if(i < j)
{
array[j] = array[i];
j --;
}
}
}
array[i] = temp;
*m = i;
return;
}
void Quick_Sort(int array[],int number)
{
int i;
if(number > 1)
{
Carve_up(array,number,&i);
Quick_Sort(array,i);
Quick_Sort(&array[i + 1],number - i - 1);
}
return;
}
void Run_Quick_Sort()
{
int i,array[MAXN] = {1,9,3,7,18,2,20,4,16,5,15,6,14,7,13,6,12,8,11,10};
Quick_Sort(array,MAXN);
for(i = 0;i < MAXN;i++)
printf("%3d",array[i]);
}
//:============================“ ” ===========================
int main(int argc, char* argv[])
{
Run_Quick_Sort();
printf(" ! ");
return 0;
}