三種排序對比:選擇法,插入法,冒泡法

三種排序對比:選擇法,插入法,冒泡法html

三種排序都是最基本的,時間複雜度最大爲O(n*n)的排序方法。這裏給出的是採用數組形式的簡單序列排序(從小到大)。數組


/*選擇法*/
/*選擇法的基本思路:第一次,從第一個記錄後面待排序的的記錄中,選出最小的,第一個交換。而後,循環作n次,這樣排完後成序*/
/*選擇法排序是不穩定的:由於兩個相同的記錄偏偏要反序放置*/
#include
int main()
{
    int a[10]={4,6,8,2,0,1,5,7,3,9};/*定義數組*/
    int i,j,k;
    for(j=0;j
      for(i=j+1;i
          if(a[i]
                        k=a[i];
                        a[i]=a[j];;
                        a[j]=k;
                        }/*用中間變量k作交換*/           
     
    for(j=0;j<=9;j++)printf("%d\n",a[j]);
    system("pause");
}
數據結構


/*冒泡法*/
/*冒泡法的基本思路選擇法不一樣,以下程序,第一次,經過記錄的「兩兩」比較將全部記錄中最大的記錄放到最後去。而後循環9次便可*/
/*冒泡法排序是穩定的:冒泡的過程當中相同的記錄位置不會變*/
#include
int main()
{
    int a[10]={4,6,8,2,0,1,5,7,3,9};
    int i,j,k;
    for(j=0;j
      for(i=0;i
          if(a[i]>a[i+1]){
                          k=a[i];
                          a[i]=a[i+1];
                          a[i+1]=k;
                          }
    for(j=0;j<=9;j++)printf("%d\n",a[j]);
    system("pause");
}htm

/*插入法*/
/*插入法的的意思就咱們抓牌同樣,把記錄分爲有序無序兩區。把無序區中的每一個數「挨個」拿來有序區的數比較。比有序區小的位置保持不變,大的話先挪動位置空出來,再插入*/
/*插入法也是穩定的:插入的過程當中相同的記錄位置不變。*/
#include
int main()
{
    int a[10]={9,2,2,5,6,7,4,5,1,0},i,j,k,m;
    for(i=1;i<=9;i++)
        {
        m=a[i];                     /*將a[i]先拿出來*/
        for(j=i-1;j>=0 && mblog

/*在挪位置後要保存j的值即插入位置:j-- 。因此 循環終止條件有m ]*/
                       a[j+1]=a[j];
        a[j+1]=m; /*大的從新原位置插入,小的在挪動後的位置插入*/               
        }
    for(k=0;k<=9;k++)
    printf("%d\n",a[k]);
    system("pause");
}排序

大部分數據結構書上插入排序的寫法,感受用while反而不太清楚:get

#include
int main()
{
    int i,j,k,l;
    int a[10]={4,6,8,2,0,1,5,7,3,9};
    for(i=1;i<=9;i++) /*第一個a[0]做爲有序的。從第二個依次拿來比較*/
      {
        k=a[i];/*比較的數先抽出來放到中間變量k中*/
        j=i-1; /*用j作循環判斷,從「右到左」依次比較!*/
        while(j>=0 && a[j]>k) /*若是比k大且不爲a[-1]則挪位置*/
                   {
                    a[j+1]=a[j];
                    j--; /*j--在這裏的做用值得細心領會。j在外循環中處於抽出來的記錄的前一個。這裏,在有序區中找到比k大的則向右邊挪動位置,j這時處於比k大的那個記錄的前面一個了!*/
                    }
        a[j+1]=k;    /*這時a[j+1]是挪出的空位,把k插入,若是不比k小,則插在本身原來位置*/
       }
      for(l=0;l<=9;l++)
             printf("%d\n",a[l]);
      system("pause");
}it


引用地址:http://blog.programfan.com/trackback.asp?id=30329變量

閱讀全文
類別: Arithmetic  查看評論
相關文章
相關標籤/搜索