2020年5月7日 星期四

這裡是常闇的重修地獄録 第八之卷

今天用P語言做個視覺化BUBBLE SORT吧~~

首先,這次老師已經先寫出了一套程式碼了,以下是完整程式碼......

int []a=new int[10];//Java's Array
//int []a={6,3,5,9,1,0,4,2,7,8};
//int []a={1,2,3,5,0,4,6,7,8,9};
//int []a={9,8,7,6,5,4,3,2,1,0};
void setup(){
  size(500,800);
  for(int i=0;i<10;i++){//random choose number
    a[i]=int(random(10));//亂數決定數字
  }
  textSize(36);
  textAlign(LEFT,TOP);
  showArray(y);
}
int y=0;
void showArray(int y){
  for(int i=0;i<10;i++){
    fill(255);  rect(i*50, y, 50,50);
    fill(0);         text(a[i], i*50, y);
  }
}
void draw(){

}
void mousePressed(){
  for(int i=0; i<10-1;i++){
    if(a[i] > a[i+1]){
      int temp=a[i];
      a[i]=a[i+1];
      a[i+1]=temp;
      fill(255,0,0,128); rect(i*50, y, 100,50);
    }
  }
  y+=50;
  showArray(y);
}

好了,我們來慢慢分析一下程式碼的用法吧!

首先是「a[i]=int(random(10));」,radom()是用來產生亂數的功能詞;(random(10)代表從0~9隨機數字;int()則是用以將亂數侷限於整數。

接著是 「 textAlign(LEFT,TOP);」,以往我們的字元產生是單純地印出文字,但單純地印出會造成文字歪掉,因為印出文字的默認方式為左下角像右上角印,導致文字與方格錯位。所以textAlign()可以用來決定印出起始位置,這樣就能控制文字了。

接著是「fill(255,0,0,128)」,嗯?你說這裡有啥好說,不是只是填紅色嗎?不不不不不,沒這麼簡單唷~~看看RGB之後的那個「128」,這是alpha,簡寫a,代表的是顏色的透明度,最大255,數值越低越透明。

當然,這次的重點是這一段:
  for(int i=0; i<10-1;i++){
    if(a[i] > a[i+1]){
      int temp=a[i];
      a[i]=a[i+1];
      a[i+1]=temp;
這一段就是BUBBLE SORT的重點了,我們設定了一個變數「temp」,它是用來作為中間介質用的,是為了避免改變原陣列中的值。 只要用這串程式碼就能達到BUBBLE SORT的效果了唷~~

好啦,關於BUBBLE SORT的部分就先到這裡吧,接著來完成上禮拜的遊戲吧~~



沒有留言:

張貼留言