快速排序(陣列和鍊錶版本)

2021-06-18 20:31:34 字數 884 閱讀 6405

快速排序:

如果在陣列已經是公升序降序的情況下,可能會出現n^2 的複雜度,可在預先處理

樞紐元的選取也有多種方式

第乙個區間第乙個數字

區間最後乙個數字

區間第乙個數字,最後乙個數字,中間位置的數字,這三個數的中位數為做樞紐元,一般來說 第三種會會使快排的效率好些

時間複雜度:o(nlogn) 最壞情況下o(n*n)

空間複雜度:o(logn)

#include void qsort(int* a, int le, int ri)

while(a[i] < p && i < j)

i++;

if(i < j)

}a[i] = p;

qsort(a,le,i-1);

qsort(a,i+1, ri);

}int main() ;

qsort(a,0,9);

int i=0;

for(i=0; i<10; i++)

return 0;

}

//鍊錶般的快速排序
void qsort(node * head,node * tail)

while(le != ri && le->val < p)

le = le->next;

if(le != ri)

}le->val = p;

if(head != le)

qsort(head,le->pre);

if(le != tail)

qsort(le->next,tail);

}

氣泡排序 陣列 鍊錶

對一組資料排序,例如 5 2 3 1 4 int flag 0,temp int s 10 定義陣列並賦值 for int i 0 i 10 i if flag 0 break 上述 外層迴圈控制迴圈的次數,最壞的情況下迴圈10次排序完成 內層迴圈控制比較個數 flag用來判斷是否發生交換,如果沒發...

實現對陣列和鍊錶的快速排序

在前面的部落格中,已經寫了關於陣列和鍊錶的選擇排序 氣泡排序和插入排序。在這裡,再次補充快速排序。快排的應用場景很多,其中面試中廣泛使用的就是在無序數集中查詢第k個大 或小 的數值。下面,我們來處理一下該排序 首先,在陣列中進行快排,這是非常常見的排序方式 快速排序演算法 void quick so...

演算法講解 選擇排序 陣列鍊錶

陣列 使用陣列儲存item意味著所有item在記憶體中都是相連的。在陣列中儲存新的item可能很麻煩,because if 沒有了新空間,就得移動到記憶體的其他地方,因此新增新元素會很慢。陣列刪除元素也很麻煩,刪除元素後,必須將後面的元素前移。結決辦法1 預留空間。缺點 1 額外請求的位置可能用不上...