快排及鍊錶排序

2021-09-13 22:01:25 字數 2046 閱讀 6705

void

quicksort

(vector<

int>

&vec,

int low,

int high)

}swap

(vec[low]

, vec[mid]);

// 保證交換到頭部的元素比樞紐元小

quicksort

(vec, low, mid -1)

;quicksort

(vec, mid +

1, high);}

// 呼叫

quicksort

(num,

0, num.

size()

-1);

struct listnode};

listnode *

createlist

(vector<

int> vec)

ptmp-

>next =

nullptr

;return phead;

}void

showlist

(listnode* phead)

cout << endl;

}

與普通的氣泡排序類似,phead1控制次數,phead2 用於比較和交換。

listnode*

bubblesortlist

(listnode* phead)

}return phead;

}// 呼叫

listnode* phead =

createlist

(vec)

;bubblesortlist

(phead)

;

和普通的快排基本上沒有區別。

void

quicksortlist

(listnode* pbegin, listnode* pend)

}swap

(pmid-

>val, pbegin-

>val)

;quicksortlist

(pbegin, pmid)

;quicksortlist

(pmid-

>next, pend);}

// 呼叫

// 將鍊錶分成兩部分進行分割

node *p1 =

mergesort

(slow-

>next)

; slow-

>next =

null

;// slow

node *p2 =

mergesort

(node)

;// 對兩段子鍊錶進行歸併

node *p0 =

(node *

)malloc

(sizeof

(node));

node *p = p0;

while

(p1 !=

null

&& p2 !=

null

)else

p = p-

>next;}if

(p1 !=

null)if

(p2 !=

null

) p = p0-

>next;

free

(p0)

;return p;

}return node;

}

鍊錶的快排 歸併排序

leetcode 148 排序鍊錶 在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。示例 1 輸入 4 2 1 3 輸出 1 2 3 4 示例 2 輸入 1 5 3 4 0 輸出 1 0 3 4 5 歸併法 不斷遞迴下去,最後再合併,合併有序鍊錶,建立dummy結點的技巧。c...

快速排序及acwing快排模板

快速排序是由c.a.r hoare在1960年發明的,謹以此篇向hoare大佬致敬!尋找標記 從一連串無序的元素中找到乙個標記x 交換 將小於等於x的元素都換到陣列左邊,將大於等於x的數都換到陣列右邊 分治 將此陣列分為兩個部分,使得左半邊的元素都不大於x,右半邊的數字都不小於x 遞迴 對左半邊陣列...

快排 堆排序

快速排序主要運用了二分的思想,每次選擇乙個基準元素,比基準元素打的元素都放在基準元素前面,比基準元素小的元素都放在基準元素後面,這樣不斷遞迴細分,完成排序。void quicksort int a,int l,int r if ia i a j i while ia i temp if ia j a...