• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 冒泡排序與插入排序比較

    冒泡排序與插入排序比較

    作者: 時間:2016-08-16 來源:網(wǎng)絡(luò) 收藏

      int main( )

    本文引用地址:http://www.czjhyjcfj.com/article/201608/295561.htm

      {

      int i;

      int sort[6]={5,4,3,2,1,0};

      COMP_COUNT = 0;

      SWAP_COUNT = 0;

      bble_sort( sort, sizeof( sort)/sizeof(int) );

      for( i =0 ; i < sizeof( sort)/sizeof(int); i++ )

      {

      printf( " %d ", sort[i]);

      }

      printf("n");

      printf("SWAP_COUNT = %dn", SWAP_COUNT);

      printf("COMP_COUNT = %dn", COMP_COUNT);

      return 0;

      }

      運行結(jié)果

      

     

      使用冒泡比較次數(shù)是15,**次數(shù)45。

      當然也可以采用同樣辦法獲得比較次數(shù)和**次數(shù)。代碼如下:

      #include

      int COMP_COUNT = 0;

      int SWAP_COUNT = 0;

      void insert_sort(int a[],int n);void insert_sort(int a[],int n)

      {

      int i,j;

      int temp;

      for ( i=1; i

      {

      SWAP_COUNT++;

      temp=a[i]; //把待排序元素賦給temp,temp在while循環(huán)中并不改變,這樣方便比較,并且它是 //要插入的元素

      j=i-1;

      //while循環(huán)的作用是將比當前元素大的元素都往后移動一個位置

      while ((j>=0)&& (temp

      SWAP_COUNT++;

      COMP_COUNT++;

      a[j+1]=a[j];

      j--; // 順序比較和移動,依次將元素后移動一個位置

      }

      SWAP_COUNT++;

      a[j+1]=temp;//元素后移后要插入的位置就空出了,找到該位置插入

      }

      }

      int main( )

      {

      int i;

      int sort[6]={5,4,3,2,1,0};

      COMP_COUNT = 0;

      SWAP_COUNT = 0;

      insert_sort( sort, sizeof( sort)/sizeof(int) );

      for( i =0 ; i < sizeof( sort)/sizeof(int); i++ )

      {

      printf( " %d ", sort[i]);

      }

      printf("n");

      printf("SWAP_COUNT = %dn", SWAP_COUNT);

      printf("COMP_COUNT = %dn", COMP_COUNT);

      return 0;

      }

      運行結(jié)果如下:

     

      使用插入比較次數(shù)是25,**次數(shù)15。

      冒泡比較次數(shù)是15,**次數(shù)45。所以盡管資料介紹他們時間復雜度都是n的平方。

      但是在6個元素時明顯優(yōu)于冒泡。

      我們可以做一個測試,在1K元算會怎樣?我們可以設(shè)計一個完全逆序的數(shù)組,元素數(shù)量1000,值從1000-1。首先測試

      代碼如下:

      #include

      int COMP_COUNT = 0;

      int SWAP_COUNT = 0;

      void bubble_sort(int a[], int n);

      void insert_sort(int a[],int n);

      void insert_sort(int a[],int n)

      {

      int i,j;

      int temp;

      for ( i=1; i

      {

      SWAP_COUNT++;

      temp=a[i]; //把待排序元素賦給temp,temp在while循環(huán)中并不改變,這樣方便比較,并且它是要插入的元素

      j=i-1;

      //while循環(huán)的作用是將比當前元素大的元素都往后移動一個位置

      while ((j>=0)&& (temp

      SWAP_COUNT++;

      COMP_COUNT++;

      a[j+1]=a[j];

      j--; // 順序比較和移動,依次將元素后移動一個位置

      }

      SWAP_COUNT++;

      a[j+1]=temp;//元素后移后要插入的位置就空出了,找到該位置插入

      }

      }

      void bubble_sort(int a[], int n)

      {

      int i, j, temp;

      for (j = 0; j < n - 1; j++)

      for (i = 0; i < n - 1 - j; i++)

      {

      COMP_COUNT++;

      if(a[i] > a[i + 1])

      {

      SWAP_COUNT +=3; //**計數(shù)器

      temp = a[i];

      a[i] = a[i + 1];

      a[i + 1] = temp;

      }

      }

      }

      int main( )

      {

      int i;

      int sort[1000];

      for( i =999 ;i>=0; i--)

      sort[i] = 999-i;

      COMP_COUNT = 0;

      SWAP_COUNT = 0;

      insert_sort( sort, sizeof( sort)/sizeof(int) );

      //bble_sort( sort, sizeof( sort)/sizeof(int) );

      for( i =0 ; i < sizeof( sort)/sizeof(int); i++ )

      {

      printf( " %d ", sort[i]);

      }

      printf("n");

      printf("SWAP_COUNT = %dn", SWAP_COUNT);

      printf("COMP_COUNT = %dn", COMP_COUNT);

      return 0;

      }

      運行結(jié)果如下:

      插入**次數(shù)501498,比較次數(shù)499500。

      

     

      接下來測試插入排序。代碼如下:

      #include

      int COMP_COUNT = 0;

      int SWAP_COUNT = 0;

      void bubble_sort(int a[], int n);

      void insert_sort(int a[],int n);

      void insert_sort(int a[],int n)

      {

      int i,j;

      int temp;

      for ( i=1; i

      {

      SWAP_COUNT++;

      temp=a[i]; //把待排序元素賦給temp,temp在while循環(huán)中并不改變,這樣方便比較,并且它是 //要插入的元素

      j=i-1;

      //while循環(huán)的作用是將比當前元素大的元素都往后移動一個位置

      while ((j>=0)&& (temp

      SWAP_COUNT++;

      COMP_COUNT++;

      a[j+1]=a[j];

      j--; // 順序比較和移動,依次將元素后移動一個位置

      }

      SWAP_COUNT++;

      a[j+1]=temp;//元素后移后要插入的位置就空出了,找到該位置插入

      }

      }

      void bubble_sort(int a[], int n)

      {

      int i, j, temp;

      for (j = 0; j < n - 1; j++)

      for (i = 0; i < n - 1 - j; i++)

      {

      COMP_COUNT++;

      if(a[i] > a[i + 1])

      {

      SWAP_COUNT +=3; //**計數(shù)器

      temp = a[i];

      a[i] = a[i + 1];

      a[i + 1] = temp;

      }

      }

      }

      int main( )

      {

      int i;

      int sort[1000];

      for( i =999 ;i>=0; i--)

      sort[i] = 999-i;

      COMP_COUNT = 0;

      SWAP_COUNT = 0;

      //insert_sort( sort, sizeof( sort)/sizeof(int) );

      bubble_sort( sort, sizeof( sort)/sizeof(int) );

      for( i =0 ; i < sizeof( sort)/sizeof(int); i++ )

      {

      printf( " %d ", sort[i]);

      }

      printf("n");

      printf("SWAP_COUNT = %dn", SWAP_COUNT);

      printf("COMP_COUNT = %dn", COMP_COUNT);

      return 0;

      }

      運行結(jié)果如下:

      

     

      冒泡**次數(shù)1498500,比較次數(shù)499500。插入**次數(shù)501498,比較次數(shù)499500。

      比較次數(shù)相同。**次數(shù)冒泡次數(shù)很多。是插入排序的2.99倍。所以插入排序優(yōu)于冒泡。


    上一頁 1 2 下一頁

    關(guān)鍵詞: 冒泡排序 插入排序

    評論


    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 娱乐| 博客| 焦作市| 富源县| 阜新市| 龙里县| 丘北县| 西林县| 保康县| 天台县| 满洲里市| 芜湖县| 荔浦县| 冀州市| 长丰县| 镇巴县| 北安市| 四会市| 措美县| 托克托县| 梅河口市| 年辖:市辖区| 红安县| 汶上县| 团风县| 桐城市| 报价| 玛纳斯县| 顺昌县| 堆龙德庆县| 黄冈市| 漠河县| 县级市| 吴桥县| 余姚市| 浠水县| 平昌县| 汶上县| 钟祥市| 齐齐哈尔市| 太康县|