荷蘭國旗學習心得體會
阿新 • • 發佈:2018-12-17
荷蘭國旗問題
使用的方法是歸併排序演算法,用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; }