排序演算法達快不到O n

2021-04-14 12:26:11 字數 396 閱讀 2657

排序的演算法,時間複雜度不可能達到o(n),最快是o(logn)或者o(fun(n)),fun(n)>n;

原因如下:

1.時間是o(n)意味著只遍歷一遍,在任何時候都不往回遍歷,遍歷一遍的限制太嚴格,如下例:

比如序列:a b c d e;在看到第四個元素d時,不能往回去比較d是處在a b c中大小位置【這句話明白?就是,假設abc是排過序的,不知道d要放在哪兒,是dabc還是abdc】,這樣的條件,是排不了序的。

從這裡也能看出,排序演算法的好壞,關鍵在於「算出d在abc中位置的效率」,現在流行的「二叉樹排序」好就好在,之前建立的二叉樹很容易就能找出d在abc中的位置【這是效率高到logn的關鍵!!】

2.排序是現代非常重要的基礎演算法,如果有o(n)的演算法,不可能不推廣的,這可是件大事!!!!!! 

排序演算法 快排

今天聊聊排序演算法,排序演算法平時也會用到,有很多比如,冒泡,快排,選擇,歸併排序等 今天就聊一聊快速排序演算法排序演算法的乙個宗旨就是經過一趟排序,何為一趟排序呢?就是遍歷完一次陣列,陣列中的一部分資料比另外一部分的資料都要小 當然這兩部分資料內部仍然是無序的,然後我們再對這兩部分資料分別進行排序...

快排排序演算法

氣泡排序演算法的原理如下 先從數列中取出乙個數作為基準數。分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。再對左右區間重複第二步,直到各區間只有乙個數。遞迴迴圈實現快排 param arr 陣列 param startindex 快排的開始下標 param endinde...

排序演算法 快排,歸併

從陣列中隨機選乙個數,比這個數大的放右邊,比這個數小的放左邊。快排中的乙個細節 如果乙個數等於p的時候,既可以在左邊又可以在右邊。這麼做是為了避免如果陣列中所有的數都一樣,則會造成資料的不平衡。快排的目的是能夠使得左邊和右邊的數都差不多,這樣的話時間複雜度就不會退化到o n 2 而是o n logn...