2010年4月23日 星期五

▌pd小練習_氣泡排序法(bubble sort)

檔案下載


其實在pd本來就有[sort]這功能,不過我還是想試試用C語言的同樣邏輯與方法在pd重現

紅色的slider可以控制亂數產生的數量(0-100),按下bang按鈕後,就可以在陣列array1
上,看到自動排序的過程。

如果能把他運用在gem裡,光是想像畫面就覺得會很有趣。


#include<stdio.h>

#include<stdlib.h>

#include<time.h>


void swap(int *x,int *y);
void bubble(int *c,int d);

int main (int argc,char *argv[]){
    int i;
    int th; //幾次//
    time_t t;
  
  
    printf("\n\n");
    printf("請輸入要產生的亂數次數:");
    scanf("%d", &th);
  
    int num[(th-1)];
    int *ptr;
    ptr=num;

  
    printf("\n要產生=%d次亂數\n\n",th);
    printf("\n ==================================================== \n");
  
    srand((unsigned)time(&t));
    for(i=0;i<=(th-1);i++){
        num[i]=rand()%1000+1;
        printf(" 第 %d 次亂數= %d \n\n",i+1,*(ptr+i));
    }
    printf("排序前= \t");
    for (i=0; i<=(th-1); i++) {
        printf("%3d \t",*(ptr+i));
    }
    printf("\n ==================================================== \n");
  
    bubble(ptr,th);
    printf("\n");
    printf("排序後= \t");
    for (i=0; i<=(th-1); i++) {
        printf("%3d \t",*(ptr+i));
    }
    printf("\n\n");
    return 0;
  
}

//----------------------------------------------------//

void bubble(int *c,int d){
  
    int i=d-2;
    int j;
    for(i; i>=0; i--)
    {
        for(j=0; j<=i; j++)
        {
            if(*(c+j)>*(c+j+1))
            {
              
                swap((c+j),(c+(j+1)));
                  
              
            
            }
        }
    }
}


void swap(int *x,int *y){
    int tmp;
    tmp=*x;
    *x=*y;
    *y=tmp;
}