程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 排序算法入門之冒泡排序優化

排序算法入門之冒泡排序優化

編輯:C++入門知識

先來說說,冒泡排序哪些地方需要優化: 根據上一篇文章的內容,可以知道冒泡排序的核心是兩兩對比進行交換。如果有一個無序序列(2,1,3,4,5,6,7,8,9,10) 按照上一篇文章的代碼,從第一次循環交換後的操作,可以說都是沒必要的。所以,這些操作就是我們需要優化的地方。 那麼如何優化? 通過觀察可以看到,造成沒必要的操作主要原因是後面8個數的順序都已經是有序。所以,我們可以通過設置一個標記變量,標記序列中的數是否在循環結束前就已經排好序 代碼: [cpp]  #include <stdio.h>   void swap(int *a, int *b);   int main()   {       int    array[10] = {2, 1, 3, 4, 5, 6, 7, 8, 9, 10};       int    i, j;       int    flag = 1;   //設置標記變量       for (i = 0; i < 10 && flag; i++)       {           flag = 0;      //只要flag在下一次外循環條件檢測的時候值為0,就說明已經排好序,不用繼續循環           for (j = 9; j > i; j--)           {               if (array[j] < array[j-1])               {                   swap(&array[j], &array[j-1]);                   flag = 1;   //如果有交換,就將標記變量賦1               }           }       }          for (i = 0; i < 10; i++)       {           printf("%d\n", array[i]);       }       return    0;   }   void swap(int *a, int *b)   {       int    temp;       temp = *a;         *a = *b;         *b = temp;   }   根據優化過的代碼,當最好情況的時候,冒泡排序的時間復雜度是O(n

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved