2013年8月26日 星期一

選擇排序


選擇排序


先找出陣列中最小的數字,再將他放置於最左的位置。

code:
#include <stdio.h>

int main()
{
    int r[10]={4,7,24,1,9,47,22,31,6,10};//宣告10個數字
    int i,k,tmp,small,no=0;//tmp用來暫存數字,small用來暫存目前最小數字,no用來儲存當前的序數。

    for(k=0;k<10;k++)
    {
        tmp=small=r[k];
        for(i=k+1;i<10;i++)
           if(small>r[i])
          {
              small=r[i];
              no=i;
          }
        if(small!=r[k])
       {
           r[k]=small;
           r[no]=tmp;
       }
   }
for(i=0;i<10;i++)
printf("%d\t", r[i]);// 印出 1 4 6 7 9 10 22 24 31 47

}

參考資料:排序演算法

插入排序


插入排序


第1個視為已排序,由第2個開始,比大小後,再依序將右方未排序的資料插入左方已排序的區段中。

code:
#include <stdio.h>


int main()
{
int r[10]={4,7,24,1,9,47,22,31,6,10};//先宣告10個數字
int i,j,now;

for(j=1;j<10;j++)
{
for(i=j;i>=0;i--)
{
if(r[i]<r[i-1])
{
now=r[i-1];
r[i-1]=r[i];
r[i]=now;
}
else
break;
}
}


for(i=0;i<10;i++)
printf("%d\t", r[i]);// 印出 1 4 6 7 9 10 22 24 31 47

}

參考資料:排序演算法

2013年8月21日 星期三

交換排序



交換排序



由第一個開始,與後項比較大小,若比後項大,則與後項交換位置,否則不動。


Code:
#include <stdio.h>


int main()
{
  int r[10]={4,7,24,1,9,47,22,31,6,10};//先設10個數字
  int p,i,k,now,count=0;

    for(p=0;p<10;p++)//迴圈從r[0]開始執行到r[9]
    {
      for(i=0;i<10;i++)//判斷是否後項都大於前項
        if(r[i+1]>r[i])
          count++;
      if(count==9)
        break;
      else
      {
        for(i=1;i<10;i++)// 執行9次
        {
          for(k=i-1;k>=0;k--)//從 i-1 到 0
            if(r[k]>r[i])//i-1 > i
            {
              now=r[i];//now(null) = i(original)
              r[i]=r[k];
              r[k]=now;//i-1(new) = i(original)
            }
            else
              break;
        }
      }
    }
   
   for(i=0;i<10;i++)
     printf("%d\t", r[i]);// 印出 1 4 6 7 9 10 22 24 31 47

}

參考資料:排序演算法