1. 程式人生 > >荷蘭國旗學習心得體會

荷蘭國旗學習心得體會

荷蘭國旗問題

使用的方法是歸併排序演算法,用c語言編寫的

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

void printArray(int * p);
int* geneArray(void);
int* sortArray(int *arr,int l ,int r ,int p );
void swap(int* arr,int i,int j);
void swap(int* arr,int i,int j)
{
	int temp=arr[i];
	arr[i]=arr[j];
	arr[j]=temp;
}


void printArray(int *p)
{
	int i;
	int * temp=p;
  for( i = 0; i < 10;i++ )
  {
  	 printf( "%-2d",temp[i]);
  }
  printf("\n");
}

int* geneArray(void)
{
	int i;
	int* p=(int*)malloc(10*sizeof(int));
	srand( (unsigned)time( NULL ) );  
  for( i = 0; i < 10;i++ )
  {
  	p[i]=(rand()%10);
  }
  return p;
}

int* sortArray(int *arr,int l ,int r ,int p )//歸併排序演算法
{
	int less=l-1;
	int more=r+1;
	
	while(l<more)
	{
		if(arr[l]<p)
		{

			swap(arr,++less,l++);//小於區域的擴大一個,current跳向下一個
		}
		else if(arr[l]>p)
			{
				swap(arr,l,--more);
			}
			else
				{
					l++;
				}
	}
	return arr;
	
}

int main()
{
	int *p=NULL;
	int *p2=NULL;
	int L,R,num;
	
	p=geneArray();
	
	if(NULL==p)
		{
			printf("geneArray err \n");
		}
	printf("sort early:\n");
	
	printArray(p);
//輸入比較的數字
	printf("num:");
	scanf("%d",&num);
	L=0;
	R=9;//陣列的右邊界
	printf("%d",p.length());
    printf("sort later:\n");
  
  p2=sortArray(p,L,R,num);
  printArray(p2);
	free(p);
	p=NULL;
	p2=NULL;
	return 0;
}